Может ли класс быть декоратором
Python
Senior
Без компании
Может ли класс быть декоратором
Ответы
Да, класс может быть декоратором. Для этого класс должен реализовывать метод `__call__`, который будет вызываться при вызове декорируемой функции. Также можно использовать `__init__` для принятия аргументов декоратора.
Пример декоратора-класса без аргументов:
```
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():
print("Функция выполняется")
my_function()
```
Пример декоратора-класса с аргументами:
```
class DecoratorWithArgs:
def __init__(self, prefix):
self.prefix = prefix
def __call__(self, func):
def wrapper(*args, **kwargs):
print(f"{self.prefix}: До вызова")
result = func(*args, **kwargs)
print(f"{self.prefix}: После вызова")
return result
return wrapper
@DecoratorWithArgs("DEBUG")
def test():
print("Тестовая функция")
test()
```