Назад к вопросам
Junior
103
questionbank
Можно ли создать декоратор из класса?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Да, можно. Класс должен реализовывать метод __call__(), который будет выполняться при вызове экземпляра класса как функции. Экземпляр этого класса может быть использован как декоратор.
class MyDecorator:
def __init__(self, func):
self._func = func
def __call__(self, *args, **kwargs):
# Код, выполняемый до вызова декорируемой функции
print("Перед вызовом функции")
result = self._func(*args, **kwargs)
# Код, выполняемый после вызова декорируемой функции
print("После вызова функции")
return result
@MyDecorator
def my_function(x, y):
return x + y
# Вызов декорированной функции
result = my_function(1, 2)
print(f"Результат: {result}")
В этом примере:
MyDecorator- это класс, который становится декоратором.__init__принимает декорируемую функцию.__call__оборачивает вызов декорируемой функции, позволяя добавить логику до и после ее выполнения.@MyDecoratorнадmy_functionприменяет классMyDecoratorкак декоратор.