Python Glossary English

все Python 3functoolsпонятие

functools.wraps

декораторы

Копирует метаданные декорируемой функции (__name__, __doc__, __annotations__) в функцию-обёртку. Обязателен при написании декораторов.

Синтаксис

@functools.wraps(wrapped)

Забудете — и обёртка начнёт представляться чужим именем: help() и __name__ покажут wrapper, сломаются doctest'ы, автодокументация и любые реестры, где ключом служит имя функции. При этом wraps чинит только интроспекцию: вызываться по-прежнему будет wrapper(*args, **kwargs), просто inspect.signature пройдёт по проставленному __wrapped__ и покажет сигнатуру оригинала.

Примеры

from functools import wraps
def my_decorator(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs)
    return wrapper
@my_decorator
def greet(name):
    """Say hello."""
    return f'Hello, {name}'
print(greet.__name__)  # → greet
print(greet.__doc__)  # → Say hello.
print(greet('Alice'))  # → Hello, Alice
print(greet.__wrapped__)  # → ? repr функции содержит адрес

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности