您的代码中存在潜在的错误。考虑一下:
class Thing:
def __init__(self, a, b):
self.a, self.b = a, b
@classmethod
def from_int(cls, value):
return Thing(value, value + 1)
class AnotherOne(Thing):
def __init__(self, a, b):
self.a, self.b = a + 1, b + 2
现在,如果你跑AnotherOne.from_int(6)
你会得到一个Thing
object:
>>> AnotherOne.from_int(6)
<__main__.Thing object at 0x8f4a04c>
...虽然您可能想创建一个AnotherOne
object!
要解决此问题,请像这样创建对象:
class Thing:
...
@classmethod
def from_int(cls, value):
return cls(value, value + 1) # Use `cls` instead of `Thing`
我认为你的代码在其他方面都很好:确实,其用法之一classmethod
提供了除使用之外的其他方法来初始化类的实例__init__
.