繁体   English   中英

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

[英]How can I pass all the parameters to a decorator?

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

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)

样品 output 与此修改到位:

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

如果你曾经扩展你的装饰器也使用关键字 arguments,你还需要在传递它们时适当地扩展它们,使用**

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM