Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: functools, wraps, decorator

Почему без wraps теряется информация о декорируемой функции?

Вопрос проверяет понимание внутреннего устройства декораторов и причин потери метаданных функций.

Короткий ответ

Без wraps декоратор возвращает новую функцию-обёртку, которая полностью заменяет исходную. Python не копирует метаданные автоматически. В результате имя, docstring и сигнатура функции теряются. Это может ломать инструменты, использующие introspection.

Длинный ответ

Потеря метаданных — это прямое следствие того, как работают декораторы.

Что происходит технически

Декоратор:

  • принимает функцию

  • создаёт новую функцию (wrapper)

  • возвращает её вместо исходной

Для интерпретатора:

  • оригинальная функция больше не видна

  • доступен только wrapper


Какая информация теряется

Без wraps у функции пропадают:

  • __name__

  • __doc__

  • __annotations__

  • информация о сигнатуре

Это особенно критично для:

  • фреймворков

  • декораторов декораторов

  • автогенерации документации


Роль functools.wraps

wraps:

  • копирует метаданные исходной функции

  • сохраняет ссылку на неё в __wrapped__

  • делает декоратор «прозрачным»

Пример:

from functools import wraps

def dec(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs)
    return wrapper

Последствия отсутствия wraps

Без wraps:

  • отладка усложняется

  • introspection работает некорректно

  • инструменты могут ломаться без явной ошибки


Краткий вывод

functools.wraps необходим для сохранения метаданных и корректной работы декораторов в реальных проектах.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Python

    Python

Ключевые слова

#functools

#wraps

#decorator

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.