python中的裝飾器,python裝飾器
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靜態方法類方法。
裝飾器裝飾一個函數即可返回一個新的函數,裝飾一個類即可返回一個新的類,擴充了原有函數或者類的功能。
python裝飾器應該怎理解?
所謂裝飾器就是把函數封裝一下,為函數添加一些附加功能,裝飾器就是一個函數,參數為被封裝的函數,返回封裝後的函數:你可以試下:
def d(fp): def _d(*arg, **karg): print "do sth before fp.." r= fp(*arg, **karg) print "do sth after fp.." return r return _d@ddef f(): print "call f"#上面使用@d來表示裝飾器和下面是一個意思#f = d(f)f()#調用f
在python裡怎使用裝飾器?
不知道,可能不能在裝飾器跳出主函數吧