functools.wraps

Декоратор для оборачивающих функций, копирующий метаданные (__name__, __doc__ и др.) с исходной функции на обёртку.

Сигнатура@functools.wraps(wrapped)

Без wraps декорированная функция теряет своё имя и строку документации — снаружи виден внутренний wrapper. wraps восстанавливает корректные метаданные.

from functools import wraps

def logged(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        print('вызов', func.__name__)
        return func(*args, **kwargs)
    return wrapper

@logged
def greet():
    """Здоровается."""
    return 'привет'

print(greet.__name__)   # 'greet' (а не 'wrapper')
print(greet.__doc__)    # 'Здоровается.'
← Все записи: Модули collections и functools
Поддержать проект