相信你一定知道繼承,多型和封裝。封裝通常是為了提供統一介面而將具體實現過程或者屬性以方法或者類的方式對外呈現;繼承就是子類繼承父類從而擁有父類的方法和屬性;多型是繼承了同乙個父類的不同子類分別重寫了父類的某個方法而使得這個方法在不同的子類中有不同的實現。
多重繼承即子類繼承多個父類,擁有多個父類的方法和屬性。
1、封裝
比如我們想實現輸入兩個數字就可以計算其乘積。
第一種方式:
def ret2x(x,y): sum=0 while x>0: sum+=y x-=1 return sum
>>> ret2x(2,8) 16>>> ret2x(90,8) 720>>>
第二種方式:
def ret2x(x,y): return x*y
>>> ret2x(2,8) 16>>> ret2x(90,8) 720>>>
可以看到執行結果一毛一樣,對於使用者來說,不關注也看不到ret2x的具體實現,只需要呼叫拿到結果即可。
2、繼承
定義chinese類繼承human類:
class human(object): hum = '人類' def kind(self): print("人類...")class chinese(human): chin = '中國人'
執行:
>>> from payhlib import chinese>>> c = chinese()>>> c.hum'人類'>>> c.chin'中國人'>>> c.kind()人類...>>>
chinese類繼承了human類,所以chinese的物件擁有了human父類的hum屬性和kind方法。
3、多型
繼續在繼承的基礎上進行演示:
class human(object): hum = '人類' def kind(self): print("人類...") def country(self): passclass chinese(human): chin = '中國人' def country(self): print('北京')class japanese(human): jap = '日本人' def country(self): print('東京')
chinese類和japanese類分別實現了父類human的country方法。
執行:
>>> from payhlib import *>>> a = chinese()>>> b = japanese()>>> a.country()北京》 b.country()東京》 a.kind()人類...>>> b.kind()人類...>>>
中國人和日本人都是人類,但是中國的首都是北京,日本的首都是東京。
4、多重繼承
講了這麼多,現在進入正題,我們都知道世界上人類按照性別可以分為男和女。如果我們於上面的chinese類和japanese增加性別相關屬性和方法,就可以通過多重繼承實現。
class human(object): hum = '人類' def kind(self): print("人類...") def country(self): passclass ***(object): summary = '性別類' def male(self): print('男人') def female(self): print('女人')class chinese(human,***): chin = '中國人' def country(self): print('北京')class japanses(human,***): jap = '日本人' def country(self): print('東京')
執行:
>>> from payhlib import *>>> a = chinese()>>> b = japanses()>>> a.kind()人類...>>> b.kind()人類...>>> a.male()男人》 b.female()女人》 a.hum'人類'>>> a.summary'性別類'>>>
chinese類即擁有human類的方法屬性,也擁有***類的方法和屬性。
多重繼承+多型的效果:
class human(object): hum = '人類' def kind(self): print("人類...") def country(self): passclass ***(object): summary = '性別類' def male(self): print('男人') def female(self): print('女人')class chinese(human,***): chin = '中國人' def country(self): print('北京') def male(self): print('中國男人') def female(self): print('中國女人')class japanses(human,***): jap = '日本人' def country(self): print('東京') def male(self): print('日本男人') def female(self): print('日本女人')
執行:
>>> from payhlib import *>>> a = chinese() >>> b = japanses()>>> a.kind()人類...>>> b.kind() 人類...>>> a.country()北京》 b.country() 東京》 a.male()中國男人》 b.male() 日本男人》 a.female() 中國女人》 b.female() 日本女人》 a.summary '性別類'>>> b.summary '性別類'>>>
chinese類和japanese類同時繼承了human類和***類,所有chinese的物件和japanese的物件就擁有了human和***的屬性和方法,但是他們又分別重寫了父類的country和male即female方法。這種多重繼承的方式也稱mixin(混入)。
往期推薦
python的@property
python的動態屬性和方法
robotframework簡明教程全套
好文!必須在看
多重繼承 C 繼承和封裝
這一篇介紹一下 c 物件導向另外兩個特性繼承和封裝 繼承的限定詞 成員的繼承 class testa testa int i class test public testa test 執行結果 testa ctor test ctor class testa testa int i class te...
python封裝繼承 python繼承 封裝
python繼承 封裝 1 為什麼要封裝 封裝資料的主要原因是 保護隱私 封裝方法的主要原因是 隔離複雜度 2 封裝分為兩個層面 第乙個層面的封裝 什麼都不用做 建立類和物件會分別建立二者的命名空間,我們只能用類名.或者obj.的方式去訪問裡面的名字,這本身就是一種封裝 r1.nickname 草叢...
python 多重繼承
python和c 一樣,支援多繼承。概念雖然容易,但是困難的工作是如果子類呼叫乙個自身沒有定義的屬性,它是按照何種順序去到父類尋找呢,尤其是眾多父類中有多個都包含該同名屬性。對經典類和新式類來說,屬性的查詢順序是不同的。現在我們分別看一下經典類和新式類兩種不同的表現 經典類 usr bin pyth...