Я применяю декоратор для некоторых функций, и декоратору потребуются некоторые аргументы в функциях.Тем не менее, я бы назначил некоторые значения по умолчанию для аргументов.Декоратор получает аргументы с *args, **kwargs
.
def decorator(fn):
def wrapper(*args, **kwargs):
print(args)
print(kwargs)
# do something with the required1 and required2 ...
return fn(*args, **kwargs)
return wrapper
class MyClass(object):
def foo(self, a, b, required1=0, required2='x'):
pass
Но при вызове функции различными способами оболочка декоратора получит разные аргументы
A = MyClass()
A.foo(1, 2, 3, '4') # 1
A.foo(1, 2) # 2
A.foo(1, 2, required1=3, required2='4') # 3
Выводы будут такими:
#1
args: [<object at 0x0000>, 1, 2, 3, ‘4’]
kwargs: {}
#2
args: [<object at 0x0000>, 1, 2]
kwargs: {}
#3
args: [<object at 0x0000>, 1, 2]
kwargs: {‘required1’: 3, ‘required2’: ‘4’}
КакЯ должен делать, если я хочу получить доступ к необходимым аргументам, таким как r = kawrgs[‘required1’]
независимо от способа вызова функции?