Встречается на собеседованиях • сегодня

Можно ли создать декоратор из класса

Да, можно создать декоратор из класса. Для этого класс должен реализовать метод __call__, который будет вызываться при вызове декорированной функции. Также можно использовать класс как декоратор с параметрами, если реализовать __init__ и __call__.

Пример простого декоратора-класса:

python
class Logger:
    def __init__(self, func):
        self.func = func
text
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

text

Пример с параметрами:
```python
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 раза

Классы-декораторы полезны, когда нужно сохранять состояние между вызовами или реализовать сложную логику декорирования.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы