Mediumdecorator

Что такое decorator с аргументами?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Декоратор с аргументами — три уровня вложенности: outer принимает аргументы, middle — функцию, inner — wrapper.

import functools

def repeat(times):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            result = None
            for _ in range(times):
                result = func(*args, **kwargs)
            return result
        return wrapper
    return decorator

@repeat(3)
def greet(name):
    print(f'Hi {name}')

greet('Alice')   # печатает 3 раза
  • Без аргументов: def decorator(func): ...; @decorator def f(): pass;
  • Через класс: class Repeat: def __init__(self, times): ...; def __call__(self, func): ...;
  • Universal (с и без аргументов): проверить, первый аргумент — callable или нет;
  • Декораторы классов: @dataclass, @attrs.define;

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.