gpt4 book ai didi

python - 如何将所有参数传递给装饰器?

转载 作者:行者123 更新时间:2023-11-28 21:30:57 25 4
gpt4 key购买 nike

我尝试使用装饰器跟踪某些方法的执行。这是装饰器代码:

def trace(func):
def ofunc(*args):
func_name = func.__name__
xargs = args
print "entering %s with args %s" % (func_name,xargs)
ret_val = func(args)
print "return value %s" % ret_val
print "exiting %s" % (func_name)
return ofunc

问题是,如果我尝试将此装饰器应用于方法,则不会发送 self 参数。你能告诉我为什么吗?我该如何解决这个问题?

最佳答案

此行不正确:

ret_val = func(args)

当您传递参数列表时,您忘记了扩展它。应该是:

ret_val = func(*args)

进行此修改后的示例输出:

>>> class Test2:
... @trace
... def test3(self, a, b):
... pass
...
>>> t = Test2()
>>> t.test3(1,2)
entering test3 with args (<__main__.Test2 instance at 0x7ff2b42c>, 1, 2)
return value None
exiting test3
>>>

如果您扩展装饰器以获取关键字参数,则在传递它们时还需要使用 ** 适当扩展它们。

关于python - 如何将所有参数传递给装饰器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/625786/

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