面向對象三大特徵(封裝/繼承/多態)

一.封裝

1.在介紹封裝前我們先來了解下類的組成,下圖可以看出,類中有特有的類屬性,實例方法

  類方法(@classmethod),靜態方法(@staticmethod)。外部調用時有兩種方式可用

 (1)實例化一個對象,用對象.的方式去調用

 (2)直接用類名.的方式去調用,涉及到self時,需傳個實例化對象進去

2.接下來我們再來介紹下封裝,封裝就是把不想讓外界知道屬性或者方法封裝到類中,外部

 調用的時候不用去管調用方法的類別結構,這樣提高了代碼的安全性。從以上兩種圖中我們

 可以看出方法/屬性都可在外部調用,那麼如果我們不想方法或者屬性在外部調用,只要在內

 部調用呢,那麼接着往下看。

3. 我們把sex類屬性和nameAge實例方法前加兩個_,然後再外部調用時可以看到程序是報錯的

 ,提示父類中並沒有__sex。那麼我們再在類中去定義一個name的方法,再方法內去調用nam

 eAge方法,可以看到能夠正常運行,那麼說明__為開頭的方法和屬性只能再類類別調用,那麼

如果我們非要再外部調用呢,有沒有其它辦法呢,我們接着往下看。

4.python中有個方法叫做dir(),用法dir(類名),可以查詢出當前類中有多少可以使用的屬性和方法,

下圖我們可以看見除了cla原本的屬性和方法,還有其它的一些,這是因為再我們定義一個類是它

 就默認繼承object類,所以查詢出來的可用方法和屬性是object+類本身的,回歸正文,可看到

 ‘_cla__nameAge’和’_cla__sex’兩個屬性,我們先嘗試調用看看就可以看出能不能調用成功。

二.繼承(提高代碼的復用性)

1.舉個事例

  小明的爺爺長鼻尖大眼睛。小明的爸爸也是長鼻尖大眼睛,同時又是大耳朵。小明的媽媽圓臉

  長睫毛,而小明呢則長得更帥(長鼻尖大眼睛大耳朵,圓臉長睫毛)

2.繼承有三種關係

   單繼承:小明的爸爸和小明的爺爺就屬於單繼承關係

   多繼承:小明同時繼承了爸爸媽媽的大耳朵,圓臉長睫毛,屬於多繼承

  多重繼承:小明的長鼻尖大眼睛和爸爸爺爺就是要多重繼承關係

3.下面我們看下實例

   在子類中調用父類方法可使用super()去調用,也可使用父類名.的方式去調用父類中的方法,

   這點我們下章在講兩者的區別

  我們先實例化extend_father去運行看下結果,下圖結果中可以看下子類extenf_father可繼承父

  類extend_grandFather中的方法

 

 我們再來實例化xm類,看下運行結果,xm分別繼承了extend_father、extend_grandFather、

 mom類中的方法。

 4.針對特殊(以__開頭的)的方法和屬於是不可以繼承的,單也可通過上述講的dir()方法查詢可使用

    的屬性,也可直接調用,如下圖

5.上述介紹的都是單個.py文件中的類繼承,那麼多個.py文件直接的繼承如何操作呢,接着往下看

   (1)兩種模塊的導入

            1.import    模塊路徑(後也可加個as 起個別名)

            2.from   模塊路徑   import  模塊下的方法名

我們先來看下第一種

 再來看看第二種,可以看出,兩種效果相同,這裡需要注意一點,因為我們兩個.py文件在同一目

 錄下,所以導入的時候直接是模塊的名稱,如果不在目錄下,需加下路徑

6.方法重新

子類繼承父類,可以調用父類的方法,那麼如果父類的方法不滿足子類的需要,子類就可以重寫父

類的這個方法

 三.多態

1.說多個也是一同霧水,簡單理解不同對象調用同一個方法可以實現不同的效果

2.多態的兩個重要步驟

  (1)繼承

  (2)方法重新

3.簡單舉例

 父親有大耳朵,和三個孩子,但是三個孩子都不行要爸爸的大耳朵,感覺太丑,於是就在娘胎里

 把爸爸的大耳朵方法給重新掉了(僅限於代碼邏輯)

 

 然後再實例化各個子類,雖調用的是同一個方法,但結果卻不同

 

Tags: