New We are sorting MAX channels into categories and territories. Read the news

👍 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 можно вынести на уровень модуля и ничего не сломается — возможно, так и стоит сделать. Это не плохой паттерн, просто честный вопрос.
Views: 125
Open in MAX Report an inaccuracy

Report an inaccuracy

Describe what needs fixing. If you have a source, add a link.

You are leaving datool.ru

The link leads to an external website. datool.ru is not responsible for its content — check the address before entering passwords or payment details.

Redirecting in 10 s

Go