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