python中面向物件三大特徵
面向物件三大特徵
1.封裝:根據職責將屬性和方法封裝到一個抽象的類中
2.繼承:實現程式碼的重用,相同的程式碼不需要重複的寫
3.多型:以封裝和繼承為前提,不同的子類物件呼叫相同的方法,產生不同的執行結果
一、封裝
什麼是封裝:
1.封裝是面向物件程式設計的一大特點
2.面向物件程式設計的第一步 將屬性和方法封裝到一個抽象的類中(為什麼說是抽象的,因為類不能直接使用)
3.外界使用類建立物件,然後讓物件呼叫方法
4.物件方法的細節都被封裝在類的內部
例:需求:小明愛跑步
1.小明體重75.0公斤
2.每次跑步會減肥0.5公斤
3.每次吃東西體重會增加1公斤
4.小美的體重是45.0公斤
封裝例項:
1、擺放傢俱
需求:
1)房子有戶型,總面積和傢俱名稱列表
新房子沒有任何的傢俱
2)傢俱有名字和佔地面積,其中
床:佔4平米
衣櫃:佔2平面
餐桌:佔1.5平米
3)將以上三件傢俱新增到房子中
4)列印房子時,要求輸出:戶型,總面積,剩餘面積,傢俱名稱列表
被使用的類應該先開發
2、需求:
1)士兵瑞恩有一把AK47
2)士兵可以開火(士兵開火扣動的是扳機)
3)槍 能夠 發射子彈(把子彈發射出去)
4)槍 能夠 裝填子彈 --增加子彈的數量
注:一個物件的屬性可以是另外一個類建立的物件
二、繼承
1、繼承的定義
實現程式碼的重用,相同的程式碼不需要重複的寫,分為單繼承和多繼承
2、單繼承
繼承的概念:子類擁有父類的所有屬性和方法
繼承的語法
class 類名(父類):
def 子類特有的方法
"""
"""
Cat類是Animal類的子類,Animal類是Cat類的父類,Cat從Animal類繼承
Cat類是Animal類的派生類,Animal類是Cat類的基類,Cat類從Animal類派生
3、繼承的傳遞性:(爺爺 父親 兒子)
1)C類從B類繼承,B類又從A類繼承
2)那麼C類就具有B類和A類的所有屬性和方法
子類擁有父類以及父類的父類中封裝的所有屬性和方法
注:子類繼承自父類,可以直接享受父類中已經封裝好的方法
子類中應該根據自己的職責,封裝子類特有的屬性和方法
4、重寫父類方法有2種
1)覆蓋父類的方法
如果在開發過程中,父類方法的實現和子類方法的實現完全不同,就可以使用覆蓋的方法在子類中重新編寫父類中的方法
如果子類中,重寫了父類的方法
在執行中,只會呼叫在子類中重寫的父類的方法而不會呼叫父類的方法
2)擴充套件父類的方法
如果在開發過程中,子類的方法的實現包含父類的方法的實現(父類原本封裝的方法實現是子類方法的一部分,就可以使用擴充套件方法)
擴充套件父類的方法:在需要位置使用父類名,方法(self)來呼叫父類方法的執行,程式碼其他位置針對子類的需求,編寫子類特有的程式碼實現
3)多繼承
多繼承可以讓子類物件,同時具有多個父類的屬性和方法
三、多型
多型:以封裝和繼承為前提,不同的子類物件呼叫相同的方法,產生不同的執行結果
多型例項:
注:案例小結:
Person類中只需要讓狗物件呼叫game方法(這是子類的父類中封裝的方法),而不關心具體是什麼狗
game方法是在Dog父類中定義的
在程式執行時,傳入不同的狗物件的實參,就會產生不同的執行效果