gpt4 book ai didi

python - 在装饰器的包装器中访问 kwargs 和 args

转载 作者:太空宇宙 更新时间:2023-11-04 04:20:12 24 4
gpt4 key购买 nike

我有一个基于类的装饰器。问题是我需要能够访问包装函数 args 和 kwargs 但现在我不能而且我不明白为什么。这应该很容易,但不适合我。

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。这太疯狂了。

(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)

问题是我怎样才能访问 args、kwargs 并将 args 视为列表,将 kwargs 视为字典。

附言我不知道为什么它的 args 和 kwargs 看起来像那样。为什么他们看起来像那样?


如答案中所述,args 是 pdb 的命令。用户 repr(args) 查看参数。

下一个问题是可能的函数签名:1) def fn(请求, ...)2) def fn(self, a, b, c, etc, 用户)3) def fn(用户)

有没有一种方法可以用一个装饰器来处理所有这些问题?


最佳答案

您的 pdb 输出并不真正相关,args这里的行为类似于交互式 pdb 命令。

为了简单起见,要么使用repr(args),要么临时重命名*args参数

关于python - 在装饰器的包装器中访问 kwargs 和 args,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54634702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com