物件導向三大特徵(封裝/繼承/多型)

傻姑娘家的李先生發表於2022-01-15

一.封裝

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.簡單舉例

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

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

 

 然後再例項化各個子類,雖呼叫的是同一個方法,但結果卻不同

 

相關文章