Разница между `classmethod` и `staticmethod`
Python
Senior
Яндекс
Объясните разницу между `@classmethod` и `@staticmethod`. Зачем нужен каждый из них и когда вы предпочитаете один другому?
Ответы
classmethod vs staticmethod
`@classmethod` получает класс как первый аргумент (`cls`) и может работать с классом и наследниками (фабрики, альтернативные конструкторы, операции на уровне класса).
`@staticmethod` не получает ни экземпляр, ни класс — это обычная функция, просто namespaced внутри класса.
Обычно:
- если метод должен знать о классе и поддерживать наследование → `classmethod`;
- если логика не зависит от класса/экземпляра, но логически относится к домену этого класса → `staticmethod`.