Python 魔術方法指南.doc

Python 魔術方法指南.doc

ID:55632112

大小:101.00 KB

頁數:22頁

時間:2020-05-21

Python 魔術方法指南.doc_第1頁
Python 魔術方法指南.doc_第2頁
Python 魔術方法指南.doc_第3頁
Python 魔術方法指南.doc_第4頁
Python 魔術方法指南.doc_第5頁
資源描述:

《Python 魔術方法指南.doc》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。

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

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

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

4、比如一個tuple或者string。我不希望在__new__上有太多細節(jié),因為并不是很有用處,但是在Python文檔中有詳細的闡述。__init__(self,[…)此方法為類的初始化方法。當構造函數被調用的時候的任何參數都將會傳給它。(比如如果我們調用x=SomeClass(10,'foo')),那么__init__將會得到兩個參數10和foo。__init__在Python的類定義中被廣泛用到。__del__(self)如果__new__和__init__是對象的構造器的話,那么__del__就是析構器。它不實現語句delx(所以代

5、碼將不會翻譯為x.__del__())。它定義的是當一個對象進行垃圾回收時候的行為。當一個對象在刪除的時候需要更多的清潔工作的時候此方法會很有用,比如套接字對象或者是文件對象。注意,因為當解釋器退出的時候如果對象還存在,不能保證__del__能夠被執(zhí)行,所以__del__can’tserveasareplacementforgoodcodingpractices()~~~~~~~放在一起的話,這里是一個__init__和__del__實際使用的例子。fromos.pathimportjoinclassFileObject:'''給文件對

6、象進行包裝從而確認在刪除時文件流關閉'''def__init__(self,filepath='~',filename='sample.txt'):#讀寫模式打開一個文件self.file=open(join(filepath,filename),'r+')def__del__(self):self.file.close()delself.file讓定制的類工作起來使用Python的魔術方法的最大優(yōu)勢在于他們提供了一種簡單的方法來讓對象可以表現的像內置類型一樣。那意味著你可以避免丑陋的,違反直覺的,不標準的的操作方法。在一些語言中,有一

7、些操作很常用比如:ifinstance.equals(other_instance):#dosomething在Python中你可以這樣。但是這會讓人迷惑且產生不必要的冗余。相同的操作因為不同的庫會使用不同的名字,這樣會產生不必要的工作。然而有了魔術方法的力量,我們可以定義一個方法(本例中為__eq__),就說明了我們的意思:ifinstance==other_instance:#dosomething這只是魔術方法的功能的一小部分。它讓你可以定義符號的含義所以我們可以在我們的類中使用。就像內置類型一樣。用于比較的魔術方法Python對

8、實現對象的比較,使用魔術方法進行了大的逆轉,使他們非常只管而不是笨拙的方法調用。而且還提供了一種方法可以重寫Python對對象比較的默認行為(通過引用)。以下是這些方法和他們的作用。__cmp__(self

當前文檔最多預覽五頁,下載文檔查看全文

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

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