python初體驗(2) 物件導向篇

2021-08-25 21:02:46 字數 2358 閱讀 8382

在學習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的設計哲學 用一種方法,最好是只有...