Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中的静态方法中获取调用类_Python_Static Methods - Fatal编程技术网

在Python中的静态方法中获取调用类

在Python中的静态方法中获取调用类,python,static-methods,Python,Static Methods,如果您有这样的设置: class Animal(object): @staticmethod def create(): return Animal() class Frog(Animal): pass 你可以像Animal.create()那样创建动物,但是如果你做Frog.create()你也会得到Animal而不是Frog。是否有方法更改create()方法,使其创建从中调用它的类的实例?这是classmethod的典型用例: class An

如果您有这样的设置:

class Animal(object):

    @staticmethod
    def create():
        return Animal()

class Frog(Animal):
    pass

你可以像
Animal.create()
那样创建动物,但是如果你做
Frog.create()
你也会得到
Animal
而不是
Frog
。是否有方法更改
create()
方法,使其创建从中调用它的类的实例?

这是
classmethod
的典型用例:

class Animal(object):

    @classmethod
    def create(cls):
        return cls()

class Frog(Animal):
    pass

>>> Animal.create()
<Animal object at 0x51fc190>
>>> Frog.create()
<Frog object at 0x51fc610>
类动物(对象):
@类方法
def创建(cls):
返回cls()
青蛙类(动物):
通过
>>>创建
>>>Frog.create()

这是
classmethod
的典型用例:

class Animal(object):

    @classmethod
    def create(cls):
        return cls()

class Frog(Animal):
    pass

>>> Animal.create()
<Animal object at 0x51fc190>
>>> Frog.create()
<Frog object at 0x51fc610>
类动物(对象):
@类方法
def创建(cls):
返回cls()
青蛙类(动物):
通过
>>>创建
>>>Frog.create()

这是
classmethod
的典型用例:

class Animal(object):

    @classmethod
    def create(cls):
        return cls()

class Frog(Animal):
    pass

>>> Animal.create()
<Animal object at 0x51fc190>
>>> Frog.create()
<Frog object at 0x51fc610>
类动物(对象):
@类方法
def创建(cls):
返回cls()
青蛙类(动物):
通过
>>>创建
>>>Frog.create()

这是
classmethod
的典型用例:

class Animal(object):

    @classmethod
    def create(cls):
        return cls()

class Frog(Animal):
    pass

>>> Animal.create()
<Animal object at 0x51fc190>
>>> Frog.create()
<Frog object at 0x51fc610>
类动物(对象):
@类方法
def创建(cls):
返回cls()
青蛙类(动物):
通过
>>>创建
>>>Frog.create()

如果不了解此行为的目的,您能否以常规方式实例化从动物继承的对象?如果不了解此行为的目的,您能否以常规方式实例化从动物继承的对象?如果不了解此行为的目的,你能用普通的方法实例化一个从动物继承的对象吗?如果你不了解你想要这种行为的目的,你能用普通的方法实例化一个从动物继承的对象吗?是的,我实际上刚刚发现这正是我需要的,无论如何,谢谢!由于总体编程能力非常差,您能否解释一下为什么这种形式的“构建器模式”(如果是的话)比普通继承和实例化对象更可取:
frog=frog()
?@limelights在示例中它没有用,但如果您想用不同的方式实例化一个类,它可以使用,例如,你可以使用
create\u with_name('Peter')
create\u with_health('good')
等方法,然后这些方法可以为你做很多设置,所以你不必自己做。是的,我实际上刚刚发现这正是我需要的,无论如何,谢谢!由于总体编程能力非常差,您能否解释一下为什么这种形式的“构建器模式”(如果是的话)比普通继承和实例化对象更可取:
frog=frog()
?@limelights在示例中它没有用,但如果您想用不同的方式实例化一个类,它可以使用,例如,你可以使用
create\u with_name('Peter')
create\u with_health('good')
等方法,然后这些方法可以为你做很多设置,所以你不必自己做。是的,我实际上刚刚发现这正是我需要的,无论如何,谢谢!由于总体编程能力非常差,您能否解释一下为什么这种形式的“构建器模式”(如果是的话)比普通继承和实例化对象更可取:
frog=frog()
?@limelights在示例中它没有用,但如果您想用不同的方式实例化一个类,它可以使用,例如,你可以使用
create\u with_name('Peter')
create\u with_health('good')
等方法,然后这些方法可以为你做很多设置,所以你不必自己做。是的,我实际上刚刚发现这正是我需要的,无论如何,谢谢!由于总体编程能力非常差,您能否解释一下为什么这种形式的“构建器模式”(如果是的话)比普通继承和实例化对象更可取:
frog=frog()
?@limelights在示例中它没有用,但如果您想用不同的方式实例化一个类,它可以使用,例如,您可以使用
create\u with_name('Peter')
create\u with_health('good')
等方法,然后这些方法可以为您进行大量设置,这样您就不必自己进行设置。