类的静态方法是否可以返回其类的新实例。
class Foo(object):
@staticmethod
def return_new():
"returns a new instance of the class"
new_instance = ???
return new_instance
我想要它所以Foo的任何子类都将返回子类而不是Foo实例。所以取代???与Foo()不会。
答案 0 :(得分:8)
为什么不使用classmethod
?使用classmethod
,该方法接收类作为第一个参数(以下示例中为cls
)。
class Foo(object):
@classmethod
def return_new(cls):
"returns a new instance of the class"
new_instance = cls()
return new_instance
class Bar(Foo):
pass
assert isinstance(Foo.return_new(), Foo)
assert isinstance(Bar.return_new(), Bar)