Я знаю, что они делают, и я видел много примеров обоих, но я не нашел ни одного примера, где мне пришлось бы использовать 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
поверх staticmethod
?