Junior — Middle
108
Python-да functools модулінен @wraps декораторының рөлі мен қолданылуын түсіндіріп бере аласыз ба?
Сұралған компаниялар
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 помогает сохранить оригинальные атрибуты функции при декорировании.