在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')
等方法,然后这些方法可以为您进行大量设置,这样您就不必自己进行设置。