У меня есть декоратор на основе классов.Проблема в том, что мне нужно иметь доступ к аргам и кваргам с перенесенными функциями, но теперь я не могу и не понимаю почему.Это должно быть легко, но это не для меня.
class limit:
def __call__(self, fn):
@wraps(fn)
# the idea to use signature like (request, *args, **kwargs) is bad. I must accept *args and **kwargs only
def wrapper(*args, **kwargs):
# pdb breakpoint is here
user = kwargs.get('user') or kwargs.get('request').user // ERROR
return fn(*args, **kwargs)
return wrapper
Давайте посмотрим на pdb.Это **** CENSORED **** сумасшедший.
(Pdb) args
args = (<User: dua>,)
kwargs = {}
(Pdb) kwargs
{}
(Pdb) args.args
args = (<User: dua>,)
kwargs = {}
(Pdb) args.args.args.args
args = (<User: dua>,)
kwargs = {}
(Pdb) args.get('user')
args = (<User: dua>,)
kwargs = {}
(Pdb) type(args)
<class 'tuple'>
(Pdb)
Вопрос в том, как я могу получить доступ к аргументам, kwargs и обрабатывать args как список, а kwargs как dict.
PSЯ не знаю, почему так выглядит args, а kwargs.Почему они так выглядят?
Как уже упоминалось в ответе args
является командой pdb.Пользователь repr(args)
для просмотра аргументов.
Следующий вопрос - возможные сигнатуры функции: 1) def fn (request, ...) 2) def fn (self, a, b, c и т. Д., User)3) def fn (пользователь)
Есть ли способ справиться со всеми из них одним декоратором?