Что такое декоратор @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()`).