от
У меня есть своя библиотека Python. И я использую
@send_transport
декоратор от него.
@send_transport(program_version=__version__, entity=1)
def post(self):
    pass
Я могу реализовать что-то подобное?
try:
    from spo_client import send_transport    
except ImportError:
    pass
else:
    @send_transport(program_version=__version__, entity=1)
def post(self):
    pass

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста подтвердите адрес электронной почты.

1 Ответ

0 голосов
от
Для того, чтобы достичь своей цели, вы можете сделать
try:
    from spo_client import send_transport    
    decorator = send_transport(program_version=__version__, entity=1)
except ImportError:
    decorator = lambda f: f

@decorator
def post(self):
    pass
Это создает либо "правильный" декоратор или манекен, на котором преобразуют функции в себе, я. е. оставить его в покое. Другой вариант мог бы определить функцию манекена
send_transport
:
def dummy_send_transport(*a, **k):
    return lambda f: f

try:
    from spo_client import send_transport    
except ImportError:
    send_transport = dummy_send_transport
    # or just send_transport = lambda *a, **k: lambda f: f
    # but then the code would be less self

В данном случае, при ошибке импорта, send_transport()
заменяется версию, которая просто возвращает НОП декоратор, но можно назвать ее "оригинальной". Здесь, вы можете иметь несколько различных
send_transport
звонки в ваш код и не должен предопределить переменную для них.
...