Назад к вопросам
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 как декоратор.