在學習python的物件導向時,我始終參照的是c++的物件導向機制。相對而言,python的物件導向確實更簡單一些。
基礎:
整數也被作為物件。前面就看到過,說所有的東西都是物件,包括函式。
屬於乙個物件或類的變數被稱為域——這個名稱有點奇怪,c++叫成員。
域分為兩種,分別屬於物件和屬於類——其實就是成員和靜態成員。
self指標:相當於c++中的this。文件是否有問題,c++有self嗎?
類的方法的第乙個引數必須是self?為什麼?目前來說不帶self是會執行失敗的。
__init__方法
類的建構函式是__init__方法,它在建立類的時候呼叫。
它並不是必須的,可以沒有。
它可以有多個,執行的時候不會出錯,但是只可以呼叫引數最多的那個。其他的一呼叫就有問題。
成員變數和類的變數,方法
類變數的定義:縮排和方法的縮排相同。引用的時候,需要使用class.變數名的方式。
物件變數的定義:要通過self.變數名的形式在__init__方法中定義。這個是合理:不可以把成員的定義散布在**的各個地方。而且只能在這裡定義,在其他的方法中是無法定義的。
如果在其他的方法中定義:self.變數名,那麼它只能在這個方法中以self.變數名的方式呼叫。
而且,在物件方法的一級縮排上,self是不合法的。那個應該屬於類的區域。
是否可以定義乙個類的全域性的方法,類似於c++的static方法?也許python根本就不需要這麼做,有他的處理方案。什麼方案?後面要了解一下。
析構函式
__del__方法相當於他的析構函式,在物件被銷毀的時候呼叫。
級別
如何定義private和public?預設的,都是public,如果名稱加雙下劃線:__,這表示是private。有點怪。
繼承:
繼承時成員特性:
對於類的成員,在子類中可以通過父類.變數名或者子類.變數名來訪問,是相同的。
對於物件的成員,在子類中通過self.變數名來訪問。但是無法訪問以__開頭的的私有變數。
繼承時方法的特性:
生成子類的建構函式的時候,不會自動呼叫父類的建構函式,你必須手動呼叫它。同時,在物件釋放的時候,同樣要手動呼叫析構函式。
子類的建構函式和析構函式可以不定義,如果不定義的話,這會呼叫基類的構造和析構函式。
python不存在動態繫結和靜態繫結。這一點和c++不同。
如果基類有乙個public函式,子類中重新定義乙個和他名稱相同,但是多乙個引數的函式,多的這個引數使用預設引數。這樣來呼叫的話,呼叫的子類的函式,而不是父類的函式。應該是這樣。
這種繼承模型確實非常簡單。
特殊方法:
__init__(self,...) 這個方法在新建物件恰好要被返回使用之前被呼叫。
__del__(self) 恰好在物件要被刪除之前呼叫。
__str__(self) 在我們對物件使用print語句或是使用str()的時候呼叫。
__lt__(self,other) 當使用 小於運算子(<)的時候呼叫。類似地,對於所有的運算子(+,>等等)都有特殊的方法。
__getitem__(self,key) 使用x[key]索引操作符的時候呼叫。
__len__(self) 對序列物件使用內建的len()函式的時候呼叫。
其他:
檔案:3.0後,開啟檔案的函式變為了open而不是原有的file。檔案必須要close嗎?如果不close是否會洩露?
儲存器:cpickle模組能夠將乙個物件完整的儲存在乙個檔案中,後面可以再把它給開啟,一模一樣。在3.0中,模組cpickle和pickle都合為pickle。
列表綜合:可以從乙個已有的列表匯出乙個新的列表。
可以在函式中通過*和**接受元組和列表。
lambda可以生成乙個新的函式物件。
exec函式和eval函式可以自行儲存在字串中的python語句。這個將執行編寫更加智慧型的**。
進一步學習計畫
我在工作中的主要語言是c和c++。聽說google在工作中會用python和c++一起程式設計,python用作膠水語言。混搭可能會成為一種趨勢,可以充分的發揮各個語言的優勢。我會在工作中找機會嘗試一下,看效果如何。我認為,乙個語言能夠方便的呼叫其他的語言,以及被其他語言呼叫,可能會成為乙個語言的重要的乙個特性。
Objective C 物件導向初體驗
1.類的宣告 1 1 inte ce開始,end結束 1 2變數和方法不能混在一起,例項變數必須放在 內 1 3沒有static const的例項變數。在.m檔案中可以宣告static靜態屬性 屬於類,不屬於物件。同樣,也沒有const方法,沒有友元方法。1 4 宣告的方法是protect,宣告是p...
物件導向初體驗(類和物件)
對一類事物的描述是乙個具體的個體1.資料型別 變數名 new 資料型別 2.new 資料型別 new 資料型別 變數名 值靜態屬性 就是在類中的成員變數動態屬性 就是在類中的方法1.new 資料型別 既是建立構造方法,也是呼叫物件 2.建立在類中 3.構造方法的名字與類名的名字一致,首字母大寫 4....
python初體驗(1) 基礎篇
我為什麼學習python 首先我的工作第一語言是c c 物件導向子集 選擇學習python一方面是因為看很多人都說python開發效率高,所以想驗證一下 另一方面,eric s.raymond在文章 如何成為一名黑客 中對python的推薦。還有一方面,python的設計哲學 用一種方法,最好是只有...