繼承和多態(tài)

在OOP程序設計中朦乏,當我們定義一個class的時候球及,可以從某個現有的class繼承,新的class稱為子類(Subclass)呻疹,而被繼承的class稱為基類吃引、父類或超類(Base class、Super class)。

繼承

# 父類
class Animal(object):
    def run(self):
        print('Animal is running...')

# 子類
class Dog(Animal):
    pass
class Cat(Animal):
    pass

對于Dog來說镊尺,Animal就是它的父類朦佩,對于Animal來說,Dog就是它的子類庐氮。Cat和Dog類似吕粗。

# 繼承有什么好處?最大的好處是子類獲得了父類的全部功能旭愧。
dog = Dog()
dog.run()

cat = Cat()
cat.run()

# 運行結果
Animal is running...
Animal is running...

# 當然颅筋,也可以對子類增加一些方法,比如Dog類:
class Dog(Animal):

    def run(self):
        print('Dog is running...')

    def eat(self):
        print('Eating meat...')

多態(tài)

# 繼承的另一個好處输枯,多態(tài)议泵。
class Dog(Animal):

    def run(self):
        print('Dog is running...')

class Cat(Animal):

    def run(self):
        print('Cat is running...')

# 運行結果
Dog is running...
Cat is running...

當子類和父類都存在相同的run()方法時,我們說桃熄,子類的run()覆蓋了父類的run()先口,在代碼運行的時候,總是會調用子類的run()瞳收。這樣碉京,我們就獲得了繼承的另一個好處:多態(tài)。

# 多態(tài)的好處
class Tortoise(Animal):
    def run(self):
        print('Tortoise is running slowly...')

>>> run_twice(Tortoise())
Tortoise is running slowly...
Tortoise is running slowly...

你會發(fā)現螟深,新增一個Animal的子類谐宙,不必對run_twice()做任何修改,實際上界弧,任何依賴Animal作為參數的函數或者方法都可以不加修改地正常運行凡蜻,原因就在于多態(tài)。

多態(tài)的好處就是垢箕,當我們需要傳入Dog划栓、CatTortoise……時条获,我們只需要接收Animal類型就可以了忠荞,因為DogCat帅掘、Tortoise……都是Animal類型委煤,然后,按照Animal類型進行操作即可锄开。由于Animal類型有run()方法素标,因此称诗,傳入的任意類型萍悴,只要是Animal類或者子類,就會自動調用實際類型的run()方法,這就是多態(tài)的意思:
對于一個變量癣诱,我們只需要知道它是Animal類型计维,無需確切地知道它的子類型,就可以放心地調用run()方法撕予,而具體調用的run()方法是作用在Animal鲫惶、DogCat還是Tortoise對象上实抡,由運行時該對象的確切類型決定欠母,這就是多態(tài)真正的威力:調用方只管調用,不管細節(jié)吆寨,而當我們新增一種Animal的子類時赏淌,只要確保run()方法編寫正確,不用管原來的代碼是如何調用的啄清。這就是著名的“開閉”原則:

對擴展開放:允許新增Animal子類六水;

對修改封閉:不需要修改依賴Animal類型的run_twice()等函數。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末辣卒,一起剝皮案震驚了整個濱河市掷贾,隨后出現的幾起案子,更是在濱河造成了極大的恐慌荣茫,老刑警劉巖想帅,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異啡莉,居然都是意外死亡博脑,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門票罐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叉趣,“玉大人,你說我怎么就攤上這事该押×粕迹” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵蚕礼,是天一觀的道長烟具。 經常有香客問我,道長奠蹬,這世上最難降的妖魔是什么朝聋? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮囤躁,結果婚禮上冀痕,老公的妹妹穿的比我還像新娘荔睹。我一直安慰自己,他們只是感情好言蛇,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布僻他。 她就那樣靜靜地躺著,像睡著了一般腊尚。 火紅的嫁衣襯著肌膚如雪吨拗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天婿斥,我揣著相機與錄音劝篷,去河邊找鬼。 笑死民宿,一個胖子當著我的面吹牛携龟,可吹牛的內容都是我干的。 我是一名探鬼主播勘高,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼峡蟋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了华望?” 一聲冷哼從身側響起蕊蝗,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赖舟,沒想到半個月后蓬戚,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡宾抓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年子漩,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片石洗。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡幢泼,死狀恐怖,靈堂內的尸體忽然破棺而出讲衫,到底是詐尸還是另有隱情缕棵,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布涉兽,位于F島的核電站招驴,受9級特大地震影響,放射性物質發(fā)生泄漏枷畏。R本人自食惡果不足惜别厘,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拥诡。 院中可真熱鬧触趴,春花似錦氮发、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宾娜。三九已至批狐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間前塔,已是汗流浹背嚣艇。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留华弓,地道東北人食零。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像寂屏,于是被迫代替她去往敵國和親贰谣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內容

  • 在OOP程序設計中迁霎,當我們定義一個class的時候吱抚,可以從某個現有的class繼承,新的class稱為子類(Sub...
    chen_000閱讀 244評論 1 1
  • 在OOP程序設計中考廉,當我們定義一個class的時候秘豹,可以從某個現有的class繼承,新的class稱為子類(Sub...
    Cookie_hunter閱讀 252評論 0 0
  • date: 2016-10-09 18:45:18 這里繼承和多態(tài)的概念與java的概念差不多昌粤。概念還是需要多次理...
    樸有天虹閱讀 265評論 0 0
  • 繼承和多態(tài): 在OOP程序設計中既绕,當我們定義一個class的時候,可以從某個現有的class繼承涮坐,新的class稱...
    黃大臻Dzreal閱讀 237評論 0 0
  • 記得看《不抱怨的世界》是在2年多之前凄贩,只是因為這是一本暢銷書,所以感興趣看袱讹。里面講到的是一個解脫抱怨的一個方法:一...
    saiyonana閱讀 211評論 0 1