【Python學習】python學習手冊--第二十五章 OOP:宏偉藍圖

面向對象編程

在Python中,每一個可以使用的類型都可以說是一個對象,類是面向對象編程的主要工具。在Python中,類的建立使用了一條語句:class語句。
類其實就是一些變量和函數的包,這些函數是用來處理內置對象或者其它對象類型。類的設計時爲了創建和管理新的對象。類可以從抽象的程序層面形象的描述我們現實世界裏的事物。
Python中的類有以下幾個作用

  • 多重實例。其實Python類就像是對象的工廠,創建一個新的對象就像是按照類的“模板”來刻畫出一個新的擁有獨立命名空間的新對象。
  • 通過繼承進行定製。類也可以進行繼承,形成新的更特別的類。
  • 運算符重載:類還可以重新定義運算符的作用,給Python程序帶來更多的靈活性。

Python中對象的屬性都是通過object.attribute語法來取的屬性,簡單的說可以概括爲以下流程效果:
找出attribute首次出項的地方,先搜索object類,再向上搜索該類繼承的所有類,取屬性的過程就是查找樹的過程,先找到的屬性就先取出來,這種子類覆蓋父類的效果就是繼承,從下至上(繼承的順序,子類在父類下。),從左至右(定義類時括號中聲明的父類從左至右的順序)。

實例和類

類是實例的工廠,實例是通過類創造出來的。在OOP中,實例就像是帶有數據的記錄,而類是處理這些記錄的程序,是“模板、方法”
當我們調用類中方法時,總會隱含着實例對象,方法會在該實例對象的命名空間中起作用(可能是在該對象本身屬性上做修改,或者返回某些值。)
從操作角度來說,實例有其它基本的數據,而類有處理這些數據的方法,這些方法使用了實例中的數據。就好比是:如果是調用實例H中的方法A,H.A(value),而實例H又是C類,那麼H.A(value)就相當於調用C.A(H)。調用C類中的方法A以處理H對象。

編寫類樹

對象內變量的調用實際上是“查找樹”的過程,我們用class語句和繼承語法來構建類與類之間聯繫:

  • 每次使用class語句都會生成一個新類
  • 調用類時,會生成一個該類的實例
  • 實例自動連接了創建該實例的類
  • 類繼承類的方法是,使用class語句時,將父類寫在子類頭部的括號內(class c3(c1,c2):),從左至右的順序決定了繼承時先後順序
  • 類中的屬性通常是在類的命名空間頂層通過賦值語句添加在類中。
  • 實例中的屬性通常是通過類的方法(通常要傳遞特殊的參數self,相當於java或c++裏面的this語句)來賦值的。

Python的面向對象編程也有構造函數,當用該類創建實例時會調用,在python的類中,構造函數定義爲__init__,它接收在新建對象時傳入的參數以初始化對象。有時也可以省略,就無法在新建對象時傳入參數了。

OOP是爲了代碼重用

面向對象編程是提高代碼的重用性,類所提供的代碼重用性是其它組件無法比擬的,當需要定製或修改一些新功能時,只需在子類中繼承後重新編寫同名屬性和方法即可,而不是在原有的代碼或模塊中進行修改。類實際是由函數和變量所構成的,很像模塊,但是類所支持屬性繼承,在類樹中查找屬性的規則(稱之爲繼承搜索)給了代碼更高的重用性和靈活性。
在OOP編程中,你只需要編寫自己的需要定製的子類。

小結

繼承搜索是先在實例對象中查找屬性,然後從創建該實例的類中查找,之後所有的父類中,由類樹的底層到頂層,從左至右的順序(出現在定義類語句頭部的括號中的順序)查找屬性,找到第一個符合要求的屬性即停止。
類的方法的第一個參數總是很特殊,是self,即它代表了調用改方法的實例對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章