Выбор ответа Middle Декораторы спрашивают часто обновлено
Декоратор с параметрами: сколько уровней
Вопрос
Как устроен декоратор, который применяют как @retry(times=3)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: retry(times) возвращает декоратор, а он возвращает обёртку. Выражение после @ сначала вычисляется: retry(times=3) должен вернуть настоящий декоратор, который потом получит функцию.
Варианты ответа
- Функция
retry(func, times)принимает функцию и параметр сразу retry(times)возвращает декоратор, а он возвращает обёрткуправильный ответ- Обёртка получает
timesчерез**kwargsпри каждом вызове - Нужно наследоваться от
functools.Decoratorи задатьtimes
Разбор
Выражение после @ сначала вычисляется: retry(times=3) должен вернуть настоящий декоратор, который потом получит функцию. Поэтому уровней три: фабрика с параметрами, декоратор, обёртка. Сигнатура retry(func, times) не сработает с синтаксисом @retry(times=3). Класса functools.Decorator не существует, а передавать times при каждом вызове значило бы менять вызывающий код.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Порядок применения и вызова декораторов
Следующий вопрос
Где применяют декораторы в реальном коде