Назад к вопросам
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 декорированная функция будет иметь метаданные внутренней функции-обертки. Это важно для отладки, интроспекции кода и работы некоторых инструментов.