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

來源:互聯網
上載者:User

在學習python的物件導向時,我始終參照的是c++的物件導向機制。相對而言,python的物件導向確實更簡單一些。

基礎:

  1. 整數也被作為對象。前面就看到過,說所有的東西都是對象,包括函數。
  2. 屬於一個對象或類的變數被稱為域——這個名稱有點奇怪,c++叫成員。
  3. 域分為兩種,分別屬於對象和屬於類——其實就是成員和靜態成員。
  4. Self指標:相當於c++中的this。文檔是否有問題,c++有self嗎?
  5. 類的方法的第一個參數必須是self?為什嗎?目前來說不帶self是會運行失敗的。

__init__方法

  1. 類的建構函式是__init__方法,它在建立類的時候調用。
  2. 它並不是必須的,可以沒有。
  3. 它可以有多個,啟動並執行時候不會出錯,但是只可以調用參數最多的那個。其他的一調用就有問題。

成員變數和類的變數,方法

  1. 類變數的定義:縮排和方法的縮排相同。引用的時候,需要使用class.變數名的方式。
  2. 物件變數的定義:要通過self.變數名的形式在__init__方法中定義。這個是合理:不可以把成員的定義散布在代碼的各個地方。而且只能在這裡定義,在其他的方法中是無法定義的。
  3. 如果在其他的方法中定義:self.變數名,那麼它只能在這個方法中以self.變數名的方式調用。
  4. 而且,在對象方法的一級縮排上,self是不合法的。那個應該屬於類的地區。
  5. 是否可以定義一個類的全域的方法,類似於c++的static方法?也許python根本就不需要這麼做,有他的處理方案。什麼方案?後面要瞭解一下。

解構函式

__del__方法相當於他的解構函式,在對象被銷毀的時候調用。

層級

如何定義private和public?預設的,都是public,如果名稱加雙底線:__,這表示是private。有點怪。

繼承:

繼承時成員特性:

  1. 對於類的成員,在子類中可以通過父類.變數名或者子類.變數名來訪問,是相同的。
  2. 對於對象的成員,在子類中通過self.變數名來訪問。但是無法訪問以__開頭的的私人變數。

繼承時方法的特性:

  1. 產生子類的建構函式的時候,不會自動調用父類的建構函式,你必須手動調用它。同時,在對象釋放的時候,同樣要手動調用解構函式。
  2. 子類的建構函式和解構函式可以不定義,如果不定義的話,這會調用基類的構造和解構函式。
  3. Python不存在動態綁定和靜態繫結。這一點和c++不同。
  4. 如果基類有一個public函數,子類中重新定義一個和他名稱相同,但是多一個參數的函數,多的這個參數使用預設參數。這樣來調用的話,調用的子類的函數,而不是父類的函數。應該是這樣。

這種繼承模型確實非常簡單。

特殊方法:

  1. __init__(self,...)   這個方法在建立對象恰好要被返回使用之前被調用。
  2. __del__(self)    恰好在對象要被刪除之前調用。
  3. __str__(self)   在我們對對象使用print語句或是使用str()的時候調用。
  4. __lt__(self,other)    當使用 小於運算子(<)的時候調用。類似地,對於所有的運算子(+,>等等)都有特殊的方法。
  5. __getitem__(self,key)    使用x[key]索引操作符的時候調用。
  6. __len__(self)    對序列對象使用內建的len()函數的時候調用。

其他:

  1. 檔案:3.0後,開啟檔案的函數變為了open而不是原有的file。檔案必須要close嗎?如果不close是否會泄露?
  2. 儲存空間:Cpickle模組能夠將一個對象完整的儲存在一個檔案中,後面可以再把它給開啟,一模一樣。在3.0中,模組Cpickle和pickle都合為pickle。
  3. 列表綜合:可以從一個已有的列表匯出一個新的列表。
  4. 可以在函數中通過*和**接受元組和列表。
  5. Lambda可以產生一個新的函數對象。
  6. Exec函數和eval函數可以自行儲存在字串中的python語句。這個將運行編寫更加智能的代碼。

進一步學習計劃

我在工作中的主要語言是c和c++。聽說google在工作中會用python和c++一起編程,python用作膠水語言。混搭可能會成為一種趨勢,可以充分的發揮各個語言的優勢。我會在工作中找機會嘗試一下,看效果如何。我認為,一個語言能夠方便的調用其他的語言,以及被其他語言調用,可能會成為一個語言的重要的一個特性。

其次,我一直以來都想開發一個關於學習的網站,同時,Google App Engine支援python,所以,我可能會利用業餘時間用python開發一個運行在google app engine的網站。

下一步的學習資料,我選擇的是《深入理解Python》,希望能夠更深一步的瞭解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.