👍 classmethod, staticmethod или instance method: простое правило выбора — 2 июля 2026 г. в 16:04:30.955
👍 classmethod, staticmethod или instance method: простое правило выбора Смотрите что метод реально использует: — нужен self → instance method — нужен cls, но не конкретный экземпляр → @classmethod — не нужно ни то ни другое → @staticmethod 🔵 Instance method — работа с состоянием объекта Всё что читает или меняет атрибуты конкретного экземпляра. Стандарт по умолчанию. 🟢 @classmethod — альтернативные конструкторы Python не поддерживает перегрузку init, поэтому когда нужно создать объект из разных источников — каждый способ становится classmethod: # из стандартной библиотеки date.today() date.fromtimestamp(1718539200) date.fromisoformat("2026-06-16") Все возвращают date, но стартуют из разного сырья. Ещё один хороший кейс — реестры и кэши на уровне класса: class Handler: _registry: dict[str, type["Handler"]] = {} @classmethod def register(cls, name: str, handler: type["Handler"]) -> None: cls._registry[name] = handler 🟡 @staticmethod — утилита без контекста Чистая функция которая живёт в классе для удобства неймспейса. Не трогает ни self ни cls: class Color: @staticmethod def hex2rgb(hex_value: str) -> tuple[int, int, int]: return tuple(int(hex_value[i:i+2], 16) for i in (1, 3, 5)) Сигнал: если staticmethod можно вынести на уровень модуля и ничего не сломается — возможно, так и стоит сделать. Это не плохой паттерн, просто честный вопрос.

