python 魔術(shù)方法指南

python 魔術(shù)方法指南

ID:10265102

大?。?31.00 KB

頁數(shù):22頁

時間:2018-06-14

python 魔術(shù)方法指南_第1頁
python 魔術(shù)方法指南_第2頁
python 魔術(shù)方法指南_第3頁
python 魔術(shù)方法指南_第4頁
python 魔術(shù)方法指南_第5頁
資源描述:

《python 魔術(shù)方法指南》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、Python魔術(shù)方法指南入門構(gòu)造和初始化構(gòu)造定制類§用于比較的魔術(shù)方法§用于數(shù)值處理的魔術(shù)方法表現(xiàn)你的類控制屬性訪問創(chuàng)建定制序列反射可以調(diào)用的對象會話管理器創(chuàng)建描述器對象持久化對象總結(jié)附錄介紹此教程為我的數(shù)篇文章中的一個重點(diǎn)。主題是魔術(shù)方法。什么是魔術(shù)方法?他們是面向?qū)ο蟮腜ython的一切。他們是可以給你的類增加”magic”的特殊方法。他們總是被雙下劃線所包圍(e.g.__init__或者_(dá)_lt__)。然而他們的文檔卻遠(yuǎn)沒有提供應(yīng)該有的內(nèi)容。Python中所有的魔術(shù)方法均在Python官方文檔中有相應(yīng)描述,但是對于他們的

2、描述比較混亂而且組織比較松散。很難找到有一個例子(也許他們原本打算的很好,在開始語言參考中有描述很詳細(xì),然而隨之而來的確是枯燥的語法描述等等)。所以,為了修補(bǔ)我認(rèn)為Python文檔應(yīng)該修補(bǔ)的瑕疵,我決定給Python中的魔術(shù)方法提供一些用平淡的語言和實(shí)例驅(qū)使的文檔。我在開始已經(jīng)寫了數(shù)篇博文,現(xiàn)在在這篇文章中對他們進(jìn)行總結(jié)。我希望你能夠喜歡這篇文章。你可以將之當(dāng)做一個教程,一個補(bǔ)習(xí)資料,或者一個參考。本文章的目的僅僅是為Python中的魔術(shù)方法提供一個友好的教程。構(gòu)造和初始化每個人都知道一個最基本的魔術(shù)方法,__init__。通

3、過此方法我們可以定義一個對象的初始操作。然而,當(dāng)我調(diào)用x=SomeClass()的時候,__init__并不是第一個被調(diào)用的方法。實(shí)際上,還有一個叫做__new__的方法,來構(gòu)造這個實(shí)例。然后給在開始創(chuàng)建時候的初始化函數(shù)來傳遞參數(shù)。在對象生命周期的另一端,也有一個__del__方法。我們現(xiàn)在來近距離的看一看這三個方法:__new__(cls,[...)__new__是在一個對象實(shí)例化的時候所調(diào)用的第一個方法。它的第一個參數(shù)是這個類,其他的參數(shù)是用來直接傳遞給__init__方法。__new__方法相當(dāng)不常用,但是它有自己的特性

4、,特別是當(dāng)繼承一個不可變的類型比如一個tuple或者string。我不希望在__new__上有太多細(xì)節(jié),因?yàn)椴⒉皇呛苡杏锰?,但是在Python文檔中有詳細(xì)的闡述。__init__(self,[…)此方法為類的初始化方法。當(dāng)構(gòu)造函數(shù)被調(diào)用的時候的任何參數(shù)都將會傳給它。(比如如果我們調(diào)用x=SomeClass(10,'foo')),那么__init__將會得到兩個參數(shù)10和foo。__init__在Python的類定義中被廣泛用到。__del__(self)如果__new__和__init__是對象的構(gòu)造器的話,那么__del__

5、就是析構(gòu)器。它不實(shí)現(xiàn)語句delx(所以代碼將不會翻譯為x.__del__())。它定義的是當(dāng)一個對象進(jìn)行垃圾回收時候的行為。當(dāng)一個對象在刪除的時候需要更多的清潔工作的時候此方法會很有用,比如套接字對象或者是文件對象。注意,因?yàn)楫?dāng)解釋器退出的時候如果對象還存在,不能保證__del__能夠被執(zhí)行,所以__del__can’tserveasareplacementforgoodcodingpractices()~~~~~~~放在一起的話,這里是一個__init__和__del__實(shí)際使用的例子。fromos.pathimportjo

6、inclassFileObject:'''給文件對象進(jìn)行包裝從而確認(rèn)在刪除時文件流關(guān)閉'''def__init__(self,filepath='~',filename='sample.txt'):#讀寫模式打開一個文件self.file=open(join(filepath,filename),'r+')def__del__(self):self.file.close()delself.file讓定制的類工作起來使用Python的魔術(shù)方法的最大優(yōu)勢在于他們提供了一種簡單的方法來讓對象可以表現(xiàn)的像內(nèi)置類型一樣。那意味著你可以避

7、免丑陋的,違反直覺的,不標(biāo)準(zhǔn)的的操作方法。在一些語言中,有一些操作很常用比如:ifinstance.equals(other_instance):#dosomething在Python中你可以這樣。但是這會讓人迷惑且產(chǎn)生不必要的冗余。相同的操作因?yàn)椴煌膸鞎褂貌煌拿?,這樣會產(chǎn)生不必要的工作。然而有了魔術(shù)方法的力量,我們可以定義一個方法(本例中為__eq__),就說明了我們的意思:ifinstance==other_instance:#dosomething這只是魔術(shù)方法的功能的一小部分。它讓你可以定義符號的含義所以我們可

8、以在我們的類中使用。就像內(nèi)置類型一樣。用于比較的魔術(shù)方法Python對實(shí)現(xiàn)對象的比較,使用魔術(shù)方法進(jìn)行了大的逆轉(zhuǎn),使他們非常只管而不是笨拙的方法調(diào)用。而且還提供了一種方法可以重寫Python對對象比較的默認(rèn)行為(通過引用)。以下是這些方法和他們的作用。__cmp__(self

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。