Sobes.tech
Junior — Middle
95

Можете объяснить роль и использование декоратора @wraps из модуля functools в Python?

Компании, где спрашивали
Т-БанкТ-Банк
AstonAston

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

sobes.tech AI

Декоратор @wraps из модуля functools используется для сохранения метаданных исходной функции при написании собственных декораторов.

Когда вы создаёте декоратор, он обычно возвращает новую функцию-обёртку, которая заменяет оригинальную функцию. Без @wraps имя, документация и другие атрибуты функции будут утеряны, что затрудняет отладку и документацию.

Пример использования @wraps:

from functools import wraps

def my_decorator(func):
    @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__)   # Выведет 'Функция приветствия'

Таким образом, @wraps помогает сохранить оригинальные атрибуты функции при декорировании.