Ответ
Декоратор класса в Python — это функция, которая принимает класс, изменяет его и возвращает изменённую версию. Это мощный инструмент для модификации поведения класса, добавления функциональности, регистрации классов или применения проверок во время его определения.
Пример:
def add_method(cls):
# Декоратор добавляет новый метод 'hello' к классу
def hello(self):
return f"Hello from {self.__class__.__name__}! I'm a new method!"
cls.hello = hello
return cls
@add_method
class MyClass:
pass
obj = MyClass()
print(obj.hello()) # Выведет: Hello from MyClass! I'm a new method!
Применение и особенности:
- Декоратор выполняется один раз, при определении класса, до создания его экземпляров.
- Он может добавлять, удалять или изменять методы и атрибуты класса.
- Часто используется для реализации паттернов (например, Singleton), для автоматической регистрации классов в реестре или для добавления метаданных.
- Декоратор должен вернуть класс (исходный, модифицированный или новый), который заменит исходный в точке определения.
Ответ 18+ 🔞
Да ты посмотри, что эти питонячие мудрецы выдумали! Декоратор класса — это ж как будто ты принёс свой старенький «Запорожец» в тюнинг-ателье, а тебе его там так обвесили, прошили и прикрутили, что он теперь «Ламборджини», блядь. По сути, это функция, которая хватает твой класс, как кот сука собака, насилует его по-тихому, что-то туда добавит, что-то уберёт, и подсовывает тебе обратно уже изменённую версию. И ты потом такой: «О, а откуда у меня тут эта новая фича?»
Вот смотри, пример, чтобы совсем пиздец понятно стало:
def add_method(cls):
# Декоратор добавляет новый метод 'hello' к классу
def hello(self):
return f"Hello from {self.__class__.__name__}! I'm a new method!"
cls.hello = hello
return cls
@add_method
class MyClass:
pass
obj = MyClass()
print(obj.hello()) # Выведет: Hello from MyClass! I'm a new method!
Видал? Класс MyClass был пустым, как мои карманы после зарплаты. Но декоратор add_method подсунул ему метод hello прямо в процессе создания. Красота, да? Чистая магия, только без кролика и цилиндра.
Где это применяется и на что смотреть:
- Весь этот цирк происходит ровно один раз, когда интерпретатор видит определение класса. То есть до того, как ты создашь хоть один объект. Это как прошивку в телефон заливают — один раз и навсегда.
- Декоратор может делать с классом что угодно: новые методы прилепить, старые оторвать, атрибуты поменять. Полный карт-бланш, ёпта.
- Часто эту штуку используют для разных умных паттернов. Например, чтобы сделать класс синглтоном (чтоб он был один, как солнце в небе, блядь). Или чтобы классы автоматом регистрировались в каком-нибудь списке. Удобно, не надо руками каждый раз писать.
- Главное правило — декоратор обязан вернуть класс. Неважно, тот же самый, но потрёпанный жизнью, или вообще новый, с нуля собранный. Но вернуть он должен именно класс, иначе пиши пропало — получишь ошибку, которая заставит тебя ебать свои старые костыли от недоумения.
Вот и весь сказ. Инструмент мощный, как удар кувалдой, но и пользоваться им надо с умом, а то так накосячишь, что потом полгода будешь разгребать.