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

2024-09-28 19:08:28 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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 

问题是,如果我尝试将这个decorator应用于方法,self参数不会被发送。你能告诉我为什么吗?我该怎么解决?在


Tags: 方法代码namereturndeftrace情况args
1条回答
网友
1楼 · 发布于 2024-09-28 19:08:28

这一行不正确:

ret_val = func(args)

你在传递参数列表时忘记了扩展它。它应该是:

^{pr2}$

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

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

如果您曾经扩展decorator来获取关键字参数,那么在传递关键字参数时,还需要使用**适当地扩展它们。在

相关问题 更多 >