> For the complete documentation index, see [llms.txt](https://treasuremaster.gitbook.io/python-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://treasuremaster.gitbook.io/python-docs/moduli-standartnoi-biblioteki-1/funkcionalnye-programmnye-moduli/functools/functools.update_wrapper.md).

# functools.update\_wrapper()

### &#x20;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 ()](/python-docs/moduli-standartnoi-biblioteki-1/funkcionalnye-programmnye-moduli/functools/functools.lru_cache.md)), эта функция автоматически добавляет атрибут `__wrapped__` к оболочке, которая относится к оборачиваемой функции.

Основное предполагаемое использование этой функции - [функции-декораторы](https://docs.python.org/3/glossary.html#term-decorator), которые обертывают декорированную функцию и возвращают ***wrapper***. Если функция ***wrapper*** не обновляется, метаданные возвращаемой функции будут отражать определение ***wrapper***, а не исходное определение функции, которое обычно менее чем полезно.

**update\_wrapper ()** может использоваться с вызываемыми объектами, отличными от функций. Любые атрибуты, указанные в назначенных или обновленных, которые отсутствуют в оборачиваемом объекте, игнорируются (т.е. эта функция не будет пытаться установить их в функции ***wrapper***). [AttributeError](https://docs.python.org/3/library/exceptions.html#AttributeError) по-прежнему возникает, если в самой функции ***wrapper*** отсутствуют какие-либо атрибуты, указанные в ***updated***.

*Новое в версии 3.2*: автоматическое добавление атрибута `__wrapped__`.

*Новое в версии 3.2*: Копирование атрибута `__annotations__` по умолчанию.

*Изменено в версии 3.2*: Отсутствующие атрибуты больше не вызывают [AttributeError](https://docs.python.org/3/library/exceptions.html#AttributeError).

*Изменено в версии 3.4*: атрибут `__wrapped__` теперь всегда относится к функции ***wrapped***, даже если эта функция определила атрибут `__wrapped__`. (см. [bpo-17482](https://bugs.python.org/issue17482))
