В вашем коде есть потенциальная ошибка.Обратите внимание:
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
:
>>> 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__
.