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