Mediumdecorator

Что такое декоратор в Python?

1Постановка

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

2Решение

Декоратор — функция (или класс), принимающая функцию и возвращающая новую (обычно обёртку). Синтаксис @: @my_decorator def f(): pass эквивалентно f = my_decorator(f).

from functools import wraps

def log(func):
    @wraps(func)   # копирует __name__, __doc__
    def wrapper(*args, **kwargs):
        print(f"call {func.__name__}")
        result = func(*args, **kwargs)
        print(f"done")
        return result
    return wrapper

@log
def add(a, b):
    return a + b
# Декоратор с аргументами — triple-nested
def repeat(times):
    def decorator(func):
        def wrapper(*a, **kw):
            for _ in range(times):
                func(*a, **kw)
        return wrapper
    return decorator

@repeat(3)
def hi(): print("hi")

Стек: @a @b @ca(b(c(f))). Встроенные: @property, @staticmethod, @classmethod, @functools.lru_cache, @dataclass, @contextmanager.

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

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

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