为什么使用classmethod而不是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()
...所以选择取决于你想要的行为。
是的,这两个班级也会这样做。
但是,现在想象一下这个类的一个子类型:
class Bar (Foo):
pass
现在调用Bar.create_new
做了一些不同的事情。 对于静态方法,你会得到一个Foo
。 对于类方法,你会得到一个Bar
。
所以重要的区别是类方法获取作为参数传递的类型。
从文档中,类方法接收它的类作为隐式参数,而静态方法不知道它们所在的类。
在您想要用子类中的不同行为覆盖的继承静态方法的情况下,这会很有用。
链接地址: http://www.djcxy.com/p/9167.html