Back to questions
Junior — Middle
76
Какова роль функции functools.wraps при создании декораторов в Python?
Answer from AI
sobes.tech AI
Функция functools.wraps используется при создании декораторов в Python для сохранения метаданных исходной функции, которую декоратор оборачивает. Без использования wraps имя функции, её документация (doc) и другие атрибуты заменяются на атрибуты внутренней функции-декоратора, что затрудняет отладку и документацию.
Пример использования:
import functools
def my_decorator(func):
@functools.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__) # Выведет 'Функция приветствия'
Таким образом, functools.wraps помогает сохранить информацию о декорируемой функции, что улучшает читаемость и поддержку кода.