Sobes.tech
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 помага да се запази информацията за декорираната функция, което подобрява четливостта и поддръжката на кода.