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

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

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

staticmethod — функция в namespace класса

@staticmethod не получает автоматически ни self, ни cls. Это обычная функция, размещённая в классе, потому что предметно связана с ним.

Если функция нужна только внутренней реализации и не является частью понятного API типа, модульная функция часто проще. Staticmethod не даёт доступ к состоянию и не делает код «объектно-ориентированнее».

Выбор можно свести к трём вопросам: нужны поля конкретного объекта — instance method; нужен сам тип или альтернативный конструктор — classmethod; не нужен ни объект, ни тип, но операция естественно принадлежит публичному namespace класса — staticmethod. Не выбирайте декоратор по тому, сколько аргументов хочется скрыть.

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