Sobes.tech
Junior — Middle
66

Каково предназначение и роль декоратора @wraps в Python?

Companies where asked
AstonAston

Answer from AI

sobes.tech AI

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

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

from functools import wraps

def decorator(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        print("Вызов функции")
        return func(*args, **kwargs)
    return wrapper

@decorator
def greet():
    "Функция приветствия"
    print("Привет!")

print(greet.__name__)  # greet
print(greet.__doc__)   # Функция приветствия

Без @wraps имя функции было бы wrapper, а документация — None. Таким образом, @wraps помогает сохранить информацию о декорируемой функции.