Python для продвинутых: ООП, типизация и тестированиеОткрытые материалыclassmethod, staticmethod и обычный метод в Python

classmethod, staticmethod и обычный метод в Python

Уроки курсаclassmethod, staticmethod и обычный метод в Python

classmethod и альтернативный конструктор

Метод с @classmethod получает класс в параметре cls. Это полезно для именованного конструктора и поведения, которое должно корректно работать у наследников.

class Account:
    def __init__(self, balance: float):
        self.balance = balance

    @classmethod
    def from_cents(cls, cents: int):
        return cls(cents / 100)

Использование cls(...), а не жёсткого Account(...), сохраняет полиморфизм. Classmethod также может читать class-level конфигурацию, но общее изменяемое состояние класса требует осторожности.