標籤:style blog http color strong for ar art
python中的裝飾器能夠裝飾函數,也能夠裝飾類,功能是向函數或者類加入?一些功能。類似於設計模式中的裝飾模式,它能夠把裝飾器的功能實現部分和裝飾部分分開,避免類中或者函數中冗餘的代碼。
裝飾器裝飾函數:
def decrator(f1):def newf():print "strings will be connected:"print f1();return newf;@decratordef strconnect():x=raw_input("input the first string");y=raw_input("input the second string");return x+y;strconnect();
上面的代碼,對函數strconnect加了裝飾器,在裝飾器decrator產生了新的函數newf,newf的函數體調用了f1函數,而且添加?了裝飾功能。
裝飾器裝飾類:
def decrator(obj):class newclass():def __init__(self,s):self.tmp=obj(s);def show(self):print "apple is good for your health";print self.tmp.show();return newclass;@decratorclass apple():def __init__(self,s):self.str=s;def show(self):return self.str;t=apple('an apple a day keeps a doctor away');t.show();
與裝飾一個函數類似,裝飾器也能夠裝飾類,裝飾器decrator中產生了新的類newclass,newclass的構造方法多了一個參數s,用於產生被裝飾的類的對象,self.tmp=obj(s)即實現了這個功能。裝飾器中的show函數也是調用了被裝飾的類的show函數,而且添加?了裝飾代碼。
除了自己定義的裝飾器,python還提供了內建的裝飾器,如靜態方法和類方法就是通過裝飾器來實現的,有關靜態方法和類方法的說明,在這裡:python靜態方法類方法。
裝飾器裝飾一個函數就可以返回一個新的函數,裝飾一個類就可以返回一個新的類,擴充了原有函數或者類的功能。