Sobes.tech
Back to questions
Junior — Middle
76

Какова роль функции functools.wraps при создании декораторов в Python?

Answer from AI

sobes.tech 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 помогает сохранить информацию о декорируемой функции, что улучшает читаемость и поддержку кода.