1. 程式人生 > >python中面向物件三大特徵

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父類中定義的
在程式執行時,傳入不同的狗物件的實參,就會產生不同的執行效果