Ниже приведен упрощенный пример того, что я пытаюсь сделать. Функция «print_number» ниже обернута двумя декораторами.
def another_decorator(function):
def wrapper(*arg, **kwargs):
ret = function(*arg, **kwargs)
print(ret, "executed from another_decorator")
return wrapper
def test_decorator(function):
def wrapper(*arg, **kwargs):
ret = function(*arg, **kwargs)
print(ret, "executed from test_decorator")
return wrapper
@another_decorator
@test_decorator
def print_number(num):
return num
x = print_number(222)
print(x)
Вышеуказанное возвращает
222 executed from test_decorator
None executed from another_decorator
None
Как видите, только test_decorator смог выполнить обернутую функцию print_number. Вызов этой функции был полностью пропущен в файле Another_decorator. Некоторый контекст о том, почему мне это нужно. У меня есть код, в котором я оборачиваю основную асинхронную функцию несколькими декораторами, где мне нужно вызывать асинхронную функцию каждым декоратором. Каждый декоратор выполняет некоторую предварительную работу, чтобы перейти к вызываемой асинхронной функции, где создается сеанс aiohttp и планируется сопрограмма с использованием sure_future. Есть ли способ или возможная процедура для вызова обернутой функции «функция» из каждого декоратора?