@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, существует ли для этой функции декоратор, или нет?
  • Вопрос задан
  • 2550 просмотров
Пригласить эксперта
Ответы на вопрос 4
mututunus
@mututunus
Backend developer (Python, Golang)
Такой возможность нет. Если только модифицировать сам декоратор.
Ответ написан
Комментировать
Tiendil
@Tiendil
Разработчик ПО.
Определить декоратор нельзя, если это не предусмотрено самим декоратором.

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

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

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

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

Войти через центр авторизации
Похожие вопросы