functools.update_wrapper()
functools.update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
Обновляет функцию wrapper, чтобы она выглядела как функция wrapped. Необязательные аргументы - это кортежи, указывающие, какие атрибуты исходной функции назначаются непосредственно соответствующим атрибутам в функции wrapper и какие атрибуты функции wrapper обновляются соответствующими атрибутами исходной функции. Значения по умолчанию для этих аргументов - это константы уровня модуля WRAPPER_ASSIGNMENTS (которые присваиваются __module__
, __name__
, __qualname__
, __annotations__
и __doc__
функции wrapper, строка документации) и WRAPPER_UPDATES (обновляет __dict__
функции wrapper, то есть словарь экземпляра).
Чтобы разрешить доступ к исходной функции для самоанализа и других целей (например, в обход декоратора кеширования, такого как lru_cache ()), эта функция автоматически добавляет атрибут __wrapped__
к оболочке, которая относится к оборачиваемой функции.
Основное предполагаемое использование этой функции - функции-декораторы, которые обертывают декорированную функцию и возвращают wrapper. Если функция wrapper не обновляется, метаданные возвращаемой функции будут отражать определение wrapper, а не исходное определение функции, которое обычно менее чем полезно.
update_wrapper () может использоваться с вызываемыми объектами, отличными от функций. Любые атрибуты, указанные в назначенных или обновленных, которые отсутствуют в оборачиваемом объекте, игнорируются (т.е. эта функция не будет пытаться установить их в функции wrapper). AttributeError по-прежнему возникает, если в самой функции wrapper отсутствуют какие-либо атрибуты, указанные в updated.
Новое в версии 3.2: автоматическое добавление атрибута __wrapped__
.
Новое в версии 3.2: Копирование атрибута __annotations__
по умолчанию.
Изменено в версии 3.2: Отсутствующие атрибуты больше не вызывают AttributeError.
Изменено в версии 3.4: атрибут __wrapped__
теперь всегда относится к функции wrapped, даже если эта функция определила атрибут __wrapped__
. (см. bpo-17482)
Last updated