functools.wraps@functools.wraps — это декоратор, который копирует метаданные исходной функции на функцию-обёртку. Это сохраняет важные атрибуты, такие как __name__, __doc__ и __module__.
Без @functools.wraps функция-обёртка заменяет идентификацию исходной функции, что вызывает:
help()import functools
def my_decorator(func):
@functools.wraps(func) # сохраняет метаданные из `func`
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
@my_decorator
def greet():
"""Says hello."""
print("Hello!")
print(greet.__name__) # Output: 'greet'
print(greet.__doc__) # Output: 'Says hello.'
Без @functools.wraps оба параметра отражали бы метаданные обёртки — 'wrapper' и None.
Использование @functools.wraps считается best practice при написании декораторов. Это гарантирует, что обёрнутая функция ведёт себя прозрачно, сохраняя свою исходную идентификацию для отладки, документации и интроспекции во время выполнения.
functools.wraps автоматически изменяет поведение декорируемой функции во время выполнения, чтобы оно совпадало с потоком выполнения исходной функции.
Новый — ещё не проверен сообществом
Вы