Что такое декоратор @wraps в Python

Python Middle Aston
Что такое декоратор @wraps в Python
Ответы
`@wraps` — это декоратор из модуля `functools`, который сохраняет метаданные (например, имя, docstring) оригинальной функции при её оборачивании другим декоратором. Без него декорированная функция теряет свои атрибуты, что может затруднить отладку и документирование. **Пример без `@wraps`:** ``` def my_decorator(func): def wrapper(*args, **kwargs): return func(*args, **kwargs) return wrapper @my_decorator def say_hello(): """Документация функции.""" print("Hello!") print(say_hello.__name__) # Выведет 'wrapper', а не 'say_hello' print(say_hello.__doc__) # Выведет None, а не документацию ``` **Пример с `@wraps`:** ``` from functools import wraps def my_decorator(func): @wraps(func) def wrapper(*args, **kwargs): return func(*args, **kwargs) return wrapper @my_decorator def say_hello(): """Документация функции.""" print("Hello!") print(say_hello.__name__) # Выведет 'say_hello' print(say_hello.__doc__) # Выведет документацию ``` Использование `@wraps` делает код чище и удобнее для работы с интроспекцией (например, `help()` или `dir()`).