Выбор ответа Junior Декораторы спрашивают часто обновлено
Зачем нужен functools.wraps
Вопрос
Что сломается, если в декораторе не использовать functools.wraps?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Функция будет называться wrapper, потеряет docstring. wraps копирует в обёртку name, qualname, doc, module, dict и добавляет wrapped со ссылкой на оригинал.
Варианты ответа
- Функция будет называться
wrapper, потеряет docstringправильный ответ - Функция перестанет принимать именованные аргументы
- Декоратор будет применяться дважды при каждом импорте модуля
- Обёртка не сможет вернуть значение исходной функции
Разбор
wraps копирует в обёртку __name__, __qualname__, __doc__, __module__, __dict__ и добавляет __wrapped__ со ссылкой на оригинал. Без него логи, трассировки, help() и фреймворки видят wrapper, а inspect.signature не может добраться до настоящей сигнатуры. На аргументы, возвращаемое значение и число применений wraps не влияет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.