2013-03-02 140 views
0

待辦事項蟒蛇裝飾功能的支持參數的是如何實施蟒蛇裝飾參數

def decorator(fn, decorArg): 
    print "I'm decorating!" 
    print decorArg 
    return fn 

class MyClass(object): 
    def __init__(self): 
     self.list = [] 

    @decorator 
    def my_function(self, funcArg = None): 
     print "Hi" 
     print funcArg 

上來看,我得到這個錯誤

TypeError: decorator() takes exactly 2 arguments (1 given) 

我試過@decorator(ARG)或@裝飾ARG 。它沒有工作。到目前爲止,我不知道這是可能的

+1

是的,但你的例子似乎表明你不明白裝飾者是如何工作的。例如,你讀過[this](http://www.python.org/dev/peps/pep-0318/#current-syntax)嗎?你想讓你的裝飾者做什麼? – BrenBarn 2013-03-02 06:36:54

+1

你應該閱讀這篇文章,以更好地瞭解如何使用裝飾器:http://stackoverflow.com/questions/739654/understanding-python-decorators – 2013-03-02 06:41:40

回答

3

我想你可能想是這樣的:

class decorator: 
    def __init__ (self, decorArg): 
     self.arg = decorArg 

    def __call__ (self, fn): 
     print "I'm decoratin!" 
     print self.arg 
     return fn 

class MyClass (object): 
    def __init__ (self): 
     self.list = [] 

    @decorator ("foo") 
    def my_function (self, funcArg = None): 
     print "Hi" 
     print funcArg 

MyClass().my_function ("bar") 

或者嵌套功能BlackNight指出:

def decorator (decorArg): 
    def f (fn): 
     print "I'm decoratin!" 
     print decorArg 
     return fn 
    return f 
+0

你也可以使用嵌套函數,而不是裝飾器類。唉,Python的縮進要求不允許我在評論中輸入示例。 – Blckknght 2013-03-02 07:14:23