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 подскажет развёрнутый ответ в реальном времени.