Junior — Middle
Каква е ролята на функцията functools.wraps при създаването на декоратори в Python?
sobes.tech AI
Отговор от 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 помага да се запази информацията за декорираната функция, което подобрява четливостта и поддръжката на кода.