Скажем, у меня есть этот декоратор:
def decorator_with_args(decorator_arg1, decorator_arg2):
def decorator(func):
def wrapped(*args, **kwargs):
if decorator_arg1 == 'arg1' and decorator_arg2 == 'arg2':
return func(*args, **kwargs)
return wrapped
return decorator
Обычно вы декорируете функцию следующим образом:
@decorator_with_args('arg1', 'arg2')
def function():
return 'foo'
>>> foo = function()
'foo'
Как мне вызвать ее без использования синтаксиса @
?
Я знаю, что если вы называете это, если это только однослойный декоратор (то есть декоратор без аргументов), то вы буквально оборачиваете его в функцию декоратора следующим образом:
>>> foo = decorator(function)
'foo'
Обратите внимание на function
не называется.Как это будет работать, если и у декоратора, и у функции есть аргументы, которые нужно передать?
>>> foo = decorator_with_args(decorator(wrapped_function))
Но тогда куда деваются *args
и **kwargs
декоратора и исходной функции?