Я не могу понять, как передать исходные аргументы сложенным декораторам. Вот мой пример:
def outside_decorator(function):
@functools.wraps(function)
def wrapper(*args, **kwargs):
print('outside args:',inspect.getfullargspec(function).args)
return function(*args,**kwargs)
return wrapper
def inside_decorator(function):
@functools.wraps(function)
def innerwrapper(*args,**kwargs):
print('inside args:', inspect.getfullargspec(function).args)
return function(*args,**kwargs)
return innerwrapper
class trial:
@outside_decorator
@inside_decorator
def __init__(self,val1,val2,val3,note1='hello',note2='hi'):
print('decorated function args:',inspect.getfullargspec(trial).args)
print('arg values:',val1, val2, val3, note1, note2)
a=trial(1,2,3)
Вывод:
outside args: []
inside args: ['self', 'val1', 'val2', 'val3', 'note1', 'note2']
decorated function args: []
arg values: 1 2 3 hello hi
Я видел несколько ответов, которые приводят к ошибке с @functools.wraps()
и включают модуль декоратора с @decorator.decorator
украшать декораторы, но это делает так, чтобы декоратор или обертка принимали только позиционный аргумент. Я перепробовал каждую комбинацию, но не могу понять, как это сделать.
Как мне сохранить аргументы с помощью составных декораторов?