python中的裝飾器

來源:互聯網
上載者:User

標籤: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靜態方法類方法

    裝飾器裝飾一個函數就可以返回一個新的函數,裝飾一個類就可以返回一個新的類,擴充了原有函數或者類的功能。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.