Выбор ответа Junior Декораторы спрашивают часто обновлено

Зачем нужен functools.wraps

Вопрос

Что сломается, если в декораторе не использовать functools.wraps?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Функция будет называться wrapper, потеряет docstring. wraps копирует в обёртку name, qualname, doc, module, dict и добавляет wrapped со ссылкой на оригинал.

Варианты ответа

  1. Функция будет называться wrapper, потеряет docstringправильный ответ
  2. Функция перестанет принимать именованные аргументы
  3. Декоратор будет применяться дважды при каждом импорте модуля
  4. Обёртка не сможет вернуть значение исходной функции

Разбор

wraps копирует в обёртку __name__, __qualname__, __doc__, __module__, __dict__ и добавляет __wrapped__ со ссылкой на оригинал. Без него логи, трассировки, help() и фреймворки видят wrapper, а inspect.signature не может добраться до настоящей сигнатуры. На аргументы, возвращаемое значение и число применений wraps не влияет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.