面向對象三大特徵(封裝/繼承/多態)
一.封裝
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.簡單舉例
父親有大耳朵,和三個孩子,但是三個孩子都不行要爸爸的大耳朵,感覺太丑,於是就在娘胎里
把爸爸的大耳朵方法給重新掉了(僅限於代碼邏輯)
然後再實例化各個子類,雖調用的是同一個方法,但結果卻不同