@Xamber

Python: как узнать, есть ли у вызываемой функции декоратор?

Добрый день.

Допустим, существует функция запускающая тостер:
def run_toster(level):
    print "Working...."

И для разной техники существует декоратор, который запускает ее в режиме низкой электроэнергии:
@use_low_power_mode
def run_toster(level):
    print "Working...."

Я запускаю эту функцию из другого места, используя строку:
f = getattr('home.kitchen','run_toster')
f(**arguments)

Можно ли как то узнать, через объект f, существует ли для этой функции декоратор, или нет?
  • Вопрос задан
  • 2552 просмотра
Пригласить эксперта
Ответы на вопрос 4
mututunus
@mututunus
Backend developer (Python, Golang)
Такой возможность нет. Если только модифицировать сам декоратор.
Ответ написан
Комментировать
Tiendil
@Tiendil
Разработчик ПО.
Определить декоратор нельзя, если это не предусмотрено самим декоратором.

Конкретно данную задачу я бы решал всё-таки через передачу настроек в функцию.

Если это Ваш декоратор (реализованный в коде проекта), то можно научить его вешать дополнительный аргумент на функцию (которая тоже объект по сути).

Другой вариант — сделать декоратор для декораторов, который будет возвращать новый декоратор, который будет вешать нужный маркер…
Ответ написан
Комментировать
@Xamber Автор вопроса
Всем спасибо, немного изменил декоратор, вроде работает
Ответ написан
Комментировать
vvpoloskin
@vvpoloskin
Инженер связи
Теоретически можно через стек вызовов. Или через видоизмененный functools.wraps.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
SpectrumData Екатеринбург
от 150 000 до 200 000 ₽
Гринатом Москва
от 150 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
13 июн. 2024, в 13:58
5000 руб./за проект
13 июн. 2024, в 13:55
30000 руб./в час
13 июн. 2024, в 13:50
5000 руб./за проект