Back to questions
Т-Банк
Aston
Junior — Middle
85
Можете объяснить роль и использование декоратора @wraps из модуля functools в Python?
Companies where asked
Answer from AI
sobes.tech AI
Декоратор @wraps из модуля functools используется для сохранения метаданных исходной функции при написании собственных декораторов.
Когда вы создаёте декоратор, он обычно возвращает новую функцию-обёртку, которая заменяет оригинальную функцию. Без @wraps имя, документация и другие атрибуты функции будут утеряны, что затрудняет отладку и документацию.
Пример использования @wraps:
from functools import wraps
def my_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
print("Перед вызовом функции")
result = func(*args, **kwargs)
print("После вызова функции")
return result
return wrapper
@my_decorator
def greet(name):
"Функция приветствия"
print(f"Привет, {name}!")
print(greet.__name__) # Выведет 'greet', а не 'wrapper'
print(greet.__doc__) # Выведет 'Функция приветствия'
Таким образом, @wraps помогает сохранить оригинальные атрибуты функции при декорировании.