functools.update_wrapper
Дополняет функцию-обёртку, данными из некоторых атрибутов оборачиваемой функции.
functools.update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
-> callable
wrapper -- Функция-обёртка.
wrapped -- Оборачиваемая функция.
assigned=WRAPPER_ASSIGNMENTS -- Кортеж с именами атрибутов оборачиваемой функции, которые следует перенести в обёртку.
updated=WRAPPER_UPDATES -- Кортеж с именами атрибутов оборачиваемой функции, которыми следует обновить обёртку.
wrapped -- Оборачиваемая функция.
assigned=WRAPPER_ASSIGNMENTS -- Кортеж с именами атрибутов оборачиваемой функции, которые следует перенести в обёртку.
updated=WRAPPER_UPDATES -- Кортеж с именами атрибутов оборачиваемой функции, которыми следует обновить обёртку.
На заметку
update_wrapper()
может использоваться с любыми объектами, поддерживающими вызов. Для
assigned
и updated
по умолчанию используются значения констант уровня модуля:WRAPPER_ASSIGNMENTS | Проставляет обёртке __name__, __module__, __doc__, +py3.2 __qualname__, __annotations__. |
WRAPPER_UPDATES | Обновляет __dict__ обёртки. |
Данная функция, в основном, используется для создания декораторов, возвращающих функцию в обёртке. Если данные обёртки не обновить данными из оборачиваемой ею функции, то отладка кода может существенно усложниться.
На заметку
Зачастую вместо вызова данной функции удобнее применять декоратор functools.wraps().
def my_func():
"""Wrapped function."""
return 5
def my_wrapper():
"""Wrapper function."""
return 10
my_wrapper = update_wrapper(my_wrapper, my_func)
my_wrapper.__name__ # 'my_func'
my_wrapper.__doc__ # 'Wrapped function.'
my_wrapper() # 10
+py3.2 Атрибуты, упомянутые в
assigned
или updated
, но отсутствующие в оборачиваемом объекте, игнорируются — они не будут установлены в обёртку. Однако же, если обёртка не имеет атрибутов, перечисленных в updated
, то будет возбуждено AttributeError.+py3.2 Для обеспечения доступа к оригинальной функции, например, для интроспекции или обхода кеширующего декоратора типа lru_cache(), обёртке будет автоматически добавлен атрибут
__wrapped__
. +py3.4 Атрибут
__wrapped__
указывает на обёрнутую функцию, даже если для неё тоже определён __wrapped__
. См. bpo-17482.
Синонимы поиска: functools.update_wrapper, functools, update_wrapper
На заметку
Зарегистрированные пользователи могут публиковать свои Статьи.