@classmethod принимает первым аргументом ссылку на класс (cls), автоматически передаваемую интерпретатором при вызове. Используется для создания фабричных методов или методов, работающих с атрибутами класса.
@staticmethod не принимает неявно первым аргументом ни класс, ни экземпляр. По сути, это обычная функция, определенная внутри класса, для логической группировки. Не имеет доступа к состоянию экземпляра или класса.
python
| Характеристика | @classmethod | @staticmethod |
|---|---|---|
| Первый аргумент | Ссылка на класс (cls) | Нет |
| Доступ к состоянию | Класса | Ни экземпляра, ни класса |
| Основное назначение | Фабричные методы, работа с атрибутами класса | Логическая группировка функций в классе |
| Вызов | Через экземпляр или класс | Через экземпляр или класс |