一.封裝
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.簡單舉例
父親有大耳朵,和三個孩子,但是三個孩子都不行要爸爸的大耳朵,感覺太醜,於是就在孃胎裡
把爸爸的大耳朵方法給重新掉了(僅限於程式碼邏輯)
然後再例項化各個子類,雖呼叫的是同一個方法,但結果卻不同