Назад к вопросам
Middle
66
questionbank

Для чего нужен декоратор wraps в Python?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

# Импорт декоратора wraps
from functools import wraps

# Определение декоратора, который выводит сообщение до и после выполнения функции
def simple_decorator(func):
    # Использование wraps для сохранения метаданных оригинальной функции
    # Без wraps информация о decorated_function (имя, docstring) будет принадлежать wrapper_function
    @wraps(func)
    def wrapper_function(*args, **kwargs):
        print("Before function call")
        result = func(*args, **kwargs)
        print("After function call")
        return result
    return wrapper_function

# Применение декоратора к функции
@simple_decorator
def my_function(a, b):
    """Это документация к my_function."""
    return a + b

# Вызов декорированной функции
result = my_function(5, 3)

# Проверка метаданных функции
# my_function.__name__ будет 'my_function' (благодаря wraps)
# my_function.__doc__ будет 'Это документация к my_function.' (благодаря wraps)
print(f"Function name: {my_function.__name__}")
print(f"Function docstring: {my_function.__doc__}")

Декоратор wraps из модуля functools используется для сохранения метаданных (имя, строка документации, аннотации и т.д.) оригинальной функции, которую оборачивает декоратор. Без wraps декорированная функция будет иметь метаданные внутренней функции-обертки. Это важно для отладки, интроспекции кода и работы некоторых инструментов.