Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

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

Как внутри декоратора получить имя вызываемой функции?

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

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

Имя функции доступно через атрибут func.__name__. Внутри декоратора можно использовать его, например, для логирования. Однако после оборачивания имя функции может замениться на имя wrapper. Чтобы сохранить оригинальные метаданные, используют functools.wraps.

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

Каждая функция в Python — это объект, у которого есть атрибуты, включая имя.

Определение: __name__ — атрибут функции, содержащий её имя.

Простой пример

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

Проблема потери метаданных

Если использовать такой декоратор:

@log_calls
def process():
    pass

print(process.__name__)  # wrapper

Имя оригинальной функции теряется.

Правильный способ

Используется functools.wraps:

from functools import wraps

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

Теперь:

print(process.__name__)  # process

Когда это важно

  • логирование;

  • трассировка вызовов;

  • документация и introspection;

  • инструменты тестирования.

Вывод

Имя функции можно получить через func.__name__, но для корректной работы декораторов нужно использовать functools.wraps, чтобы сохранить метаданные функции.

  • Аватар

    Python Guru

    Sergey Filichkin

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    4

Навыки

  • Python

    Python

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

#decorator

#function

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

  • Аватар

    Python Guru

    Sergey Filichkin

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