Для чего используется functools.wraps в декораторах
Python
Senior
Без компании
Для чего используется functools.wraps в декораторах
Ответы
`functools.wraps` используется в декораторах для сохранения метаданных оригинальной функции (имя, docstring, аннотации и т.д.). Без него декорированная функция теряет свои атрибуты, что может затруднить отладку и документацию.
Пример без `wraps`:
```
def decorator(func):
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
@decorator
def foo():
"""Docstring"""
pass
print(foo.__name__) # 'wrapper'
print(foo.__doc__) # None
```
Пример с `wraps`:
```
from functools import wraps
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
@decorator
def foo():
"""Docstring"""
pass
print(foo.__name__) # 'foo'
print(foo.__doc__) # 'Docstring'
```