2013-03-22 33 views
0

我正在考慮爲類創建裝飾器,它可以動態地將裝飾器添加到以特定字開頭的特定方法,而不是手動將裝飾器添加到每個方法。Python中的類中動態裝飾方法

任何想法如何做到這一點?

回答

2

下面的例子演示瞭如何做到這一點:

def class_dec(starts_with,fun_dec): 
    def fun(cls): 
     for k,v in cls.__dict__.items(): 
      if k.startswith(starts_with): 
       cls.__dict__[k] = fun_dec(v) 
     return cls 
    return fun 

def fun_decorator(f): 
    def dec(*args,**kwargs): 
     print "I m decorating" 
     f(*args,**kwargs) 
    return dec 

@class_dec("name",fun_decorator) 
class Hello: 
    def name_new_one(self): 
     print "new one" 

    def name(self): 
     print "Hello" 

h = Hello() 
h.name() 
h.name_new_one() 
+0

我得到這個錯誤:類型錯誤:「dictproxy」對象不支持項目分配 這似乎有效。也許不用裝飾器,我可以裝飾方法,每次調用它們?在方法調用之前調用什麼python魔術方法? – mohi666 2013-03-22 17:23:50