Sobes.tech
Back to questions
Junior — Middle
85

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

Companies where asked
Т-БанкТ-Банк
AstonAston

Answer from AI

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 помогает сохранить оригинальные атрибуты функции при декорировании.