Можно ли создать декоратор из класса
Python
Middle
Без компании
Можно ли создать декоратор из класса
Ответы
Да, можно создать декоратор из класса. Для этого класс должен реализовать метод `__call__`, который будет вызываться при вызове декорированной функции. Также можно использовать класс как декоратор с параметрами, если реализовать `__init__` и `__call__`.
Пример простого декоратора-класса:
```
class Logger:
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
print(f"Calling {self.func.__name__}")
return self.func(*args, **kwargs)
@Logger
def add(a, b):
return a + b
print(add(2, 3)) # Выведет: Calling add\n5
```
Пример с параметрами:
```
class Repeat:
def __init__(self, times):
self.times = times
def __call__(self, func):
def wrapper(*args, **kwargs):
for _ in range(self.times):
result = func(*args, **kwargs)
return result
return wrapper
@Repeat(times=3)
def greet(name):
print(f"Hello, {name}!")
greet("Alice") # Выведет Hello, Alice! 3 раза
```
Классы-декораторы полезны, когда нужно сохранять состояние между вызовами или реализовать сложную логику декорирования.