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

Может ли класс быть декоратором

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

Пример декоратора-класса без аргументов:

python
class MyDecorator:
    def __init__(self, func):
        self.func = func
text
def __call__(self, *args, **kwargs):
    print("До вызова функции")
    result = self.func(*args, **kwargs)
    print("После вызова функции")
    return result

@MyDecorator
def my_function():
print("Функция выполняется")

my_function()

text

Пример декоратора-класса с аргументами:
```python
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()
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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