我知道他们是做什么的,并且我见过很多这两个例子,但我还没有找到一个我必须使用的例子classmethod
而不是用staticmethod
.
最常见的例子是classmethod
我见过的是用于创建新实例类本身,就像这样(非常简单的例子,没有使用 atm 方法。但你明白了):
class Foo:
@classmethod
def create_new(cls):
return cls()
这将返回一个新实例Foo
打电话时foo = Foo.create_new()
。
现在为什么我不能用这个来代替:
class Foo:
@staticmethod
def create_new():
return Foo()
它的作用完全相同,为什么我应该使用classmethod
over a staticmethod
?
您的示例几乎没有什么区别,但假设您创建了一个子类Foo
并打电话给create_new
子类上的方法...
class Bar(Foo):
pass
obj = Bar.create_new()
...然后这个基类会导致一个新的Bar
要创建的对象...
class Foo:
@classmethod
def create_new(cls):
return cls()
...而这个基类会导致一个新的Foo
要创建的对象...
class Foo:
@staticmethod
def create_new():
return Foo()
...所以选择取决于您想要哪种行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)