Когда есть только один класс, как в вашем примере, тогда может работать classmethod
или staticmethod
(который явно указывает класс в его реализации).Но если вы хотите расширить класс в будущем, вы, вероятно, захотите использовать classmethod
.
. Вот пример, который основывается на вашем коде:
class ThinCrustPizza(Pizza):
pass
Если вывызовите ThinCrustPizza.prosciutto()
, вы получите экземпляр ThinCrustPizza
, а не базовый класс Pizza
, от которого он унаследовал метод.Это потому, что cls
в classmethod
будет классом, в котором вы вызывали его, который является дочерним классом.
Но если вы вызовете ThinCrustPizza.proscutto2()
, вы получите тот же экземпляр Pizza
, который выполучил бы от вызова его на Pizza
, поскольку реализация должна ссылаться на Pizza
по имени.Поскольку класс не передается, он не может сказать, что он был вызван для подкласса.