python面向物件(封裝,繼承,多型)
學習完本篇,你將會深入掌握
- 如何封裝一個優雅的藉口
- python是如何實現繼承
- python的多型
封裝
- 含義:
1.把物件的屬性和方法結合成一個獨立的單位,並儘可能隱蔽物件的內部細節(尤其是私有資料)
2.目的:使物件以外的部分不能隨意存取物件的內部資料(如屬性),從而,使軟體錯誤能夠區域性化,大大減少查錯和排錯的難度。
類的繼承
- 體現
1.設定物件中的成員變數和方法的訪問許可權,使用
__member(方法也是這樣定義),只能被類內部的方法訪問,不被外部訪問。
2.其它物件不能直接修改本物件所擁有的私有屬性和私有方法。 - 含義:
1.子類自動地享用父類中擁有的屬性和方法
示例
- 繼承優點
*示例1
例子:請確認各類之間的關係
plane(飛機)
military plane(軍事機)
passenger plane (客機)
cargo plane (貨物機)
fighter plane (戰鬥機)
Airliner (民用機)
*示例2
class employee(object):
name = “”
sex = “”
age = 0
def say():
return “hello world”
class manage(object):
name = “”
sex = “”
age = 0
# 發放工資特 有屬性
putMoney = 0
def say():
return “hello world”
- 示例3
class manage(employee):
#發放公司
putMoney = 0
#類中的方法
def say():
return “I am Manage”
繼承的定義
- 子類的成員有一部分是子類自己宣告定義的。
- 另一部分是從它的父類繼承的。
- 子類繼承父類的成員變數作為自己的一個成員變數。
- 繼承父類的方法作為自己的方法。
繼承的實現
class 類名( 父類):
成員變數賦值
成員方法宣告
說明:
1、子類將自動繼承父類中的公有成員
2、私有屬性和方法不能被繼承。
- 子類中新增加的屬性和方法是對父類的擴充套件
- 子類中定義的與父類同名的屬性是對父類屬性的隱藏,同名的方法是對父類方法的覆蓋
子類使用建構函式
- 構造方法不能支援多型,一個類中只有一個
- 如果子類沒有構造方法,則它繼承父類無引數的構造方法作為自己的構造方法
- 如果兩者都沒有構造方法,系統預設呼叫無方法的構造方法
- Super關鍵字可以呼叫父類的構造方法,但是必須使用在子類的構造方法中
成員變數的隱藏
- 當子類中定義的成員變數只要和父類中的成員變數同名時,子類就隱藏了繼承的成員變數
方法重寫
- 子類可以隱藏已繼承的方法,子類通過方法重寫來隱藏繼承的方法
- 方法重寫:定義一個方法,並且這個方法的名字、引數個數與從父類繼承的方法完全相同
- 子類通過方法的重寫可以把父類的狀態和行為改變為自身的狀態和行為
注意事項:方法覆蓋注意事項:子類重寫的父類方法的訪問許可權不能低於父類方法的訪問許可權。
- 子類繼承父類的speak()方法和cry()方法,但子類通過重寫speak()隱藏了繼承的speak()方法
super關鍵字
- Python中既可以通過super來訪問父類也可以通過父類類名來訪問
- 訪問父類方法或者重寫方法,如:super( subclass,self). Method([paramlist])
- 訪問父類屬性,如:super( subclass,self). Attribute
- 訪問父類建構函式,如:super( subclass,self). init([paramlist])
- 子類繼承父類的speak()方法和cry()方法,在speak方法中使用super來訪問父類cry、speak以及mVar屬性
多型
- 多型:是指一個程式中存在著同名不同實現的方法
- 表現形式:
1.過載:python不支援
2.重寫:子類中對父類方法進行重寫(重新定義),但具體實現不一樣
練習
1.編寫一個Ball(球)父類,包含屬性(大小,重量,顏色),包含兩個構造方法,一個預設的,一個接收(大小,重量,顏色)三個引數的構造方法。
編寫一個籃球子類,繼承Ball(球),並打印出籃球的大小,重量和顏色。2.編寫一個僱員類(Employee)包含有姓名、性別、年齡等屬性,編寫一個經理類(Manager),經理類繼承僱員類。編寫一個測試類,例項化一個經理物件,並輸出經理的姓名、性別和年齡。
3.有一個動物類(抽象類Animal),它有兩個子類狗類(Dog)和貓類(Cat)實現抽象類Animal,在Animal類中有一個打招呼的方法say(),讓它的兩個子類重寫父類打招呼的方法,實現各*
4.編寫一個Studeng類,其中包括(姓名、學號、班級、性別、年齡、家庭住址)和取得這些屬性的方法,再增加一個sayHello()方法,用於輸出學生的詳細資訊。
1)建立Studeng類的物件,編寫程式測試這些方法。
2)建立兩個學生物件,並比較二者的年齡,輸出年齡較大的學生資訊。5.程式設計實現商品以及圖書,電器,電子產品(繼承)
6.程式設計實現計算圓柱體體積,圓錐體體積的方法(繼承)
1)計算圓柱體體積方法
2)計算圓錐體體積方法