Mr.Li--python-Linux-繼承和多態(tài)

在OPP程序設計中辛馆,當我們定義一個class的時候,可以從某個現(xiàn)有的class繼承昙篙,新的class稱為子類苔可。而被繼承的class稱為基類或父類。

比如映屋,我們已經(jīng)編寫了一個名為Animal的class同蜻,有一個run()方法可以直接接打印:

class Animals:

??? def run(self):

??? print('Animals is running...')

當我們需要編寫Dog和Cat類時湾蔓,可以直接從Animals中繼承:

class Dog(Animals):

??? pass

class Cat(Animals):

??? pass

dog = Dog()

dog.run()

cat = Cat()

在這里Animals時父類默责,Cat和Dog就是子類,子類能獲取父類的功能杖虾。

運行的結(jié)果是:

Animals is running...

Animals is running...

當子類和父類都存在相同的方法是時媒熊,子類會覆蓋父類坟比,這樣代碼在運行的時候滤愕,就會調(diào)用子類,這樣我們就獲得了繼承 的另一個好處:多態(tài)

類是創(chuàng)建實例的模板注竿,而實例是一個一個具體的對象魂贬。各個實例擁有的數(shù)據(jù)互相獨立,互相不影響

方法就是與實例綁定的函數(shù)宣谈,和普通函數(shù)不同键科,方法可以直接訪問實例的數(shù)據(jù)

使用isinstance():

獲取對象繼承關系

使用dir();

獲得一個對象的所有屬性和方法

在編寫程序的時候勋颖,千萬不要把實例屬性和類屬性使用相同的名字,因為相同名稱的實例屬性會屏蔽類屬性侥祭,但當你刪除實例屬性后茄厘,在使用相同的名稱,返回的將會是類屬性

多態(tài):


繼承還可以一級一級地繼承下來胎署,就好比從爺爺?shù)桨职忠ぶ汀⒃俚絻鹤舆@樣的關系。而任何類,最終都可以追溯到根類object聊训,這些繼承關系看上去就像一顆倒著的樹

繼承可以把父類的所有功能都直接拿過來恢氯,這樣就不必重零做起鼓寺,子類只需要新增自己特有的方法勋磕,也可以把父類不適合的方法覆蓋重寫挂滓。

動態(tài)語言的鴨子類型特點決定了繼承不像靜態(tài)語言那樣是必須的。

案例:

classAnimal(object):

defrun(self):

print('Animal is running...')

classDog(Animal):

defrun(self):

print('Dog is running...')

classCat(Animal):

defrun(self):

print('Cat is running...')

defrun_twice(animal):

animal.run()

animal.run()

a=Animal()

d=Dog()

c=Cat()

print('a is Animal?',isinstance(a, Animal))

print('a is Dog?',isinstance(a, Dog))

print('a is Cat?',isinstance(a, Cat))

print('d is Animal?',isinstance(d, Animal))

print('d is Dog?',isinstance(d, Dog))

print('d is Cat?',isinstance(d, Cat))

run_twice(c)

對于一個變量幔虏,我們只需要知道它是Animal類型贝椿,無需確切地知道它的子類型,就可以放心地調(diào)用run()方法瑟蜈,而具體調(diào)用的run()方法是作用在Animal渣窜、Dog、Cat還是Tortoise對象上夷都,由運行時該對象的確切類型決定予颤,這就是多態(tài)真正的威力:調(diào)用方只管調(diào)用,不管細節(jié)党饮,而當我們新增一種Animal的子類時驳庭,只要確保run()方法編寫正確,不用管原來的代碼是如何調(diào)用的蹲堂。這就是著名的“開閉”原則:

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柒竞,一起剝皮案震驚了整個濱河市播聪,隨后出現(xiàn)的幾起案子布隔,更是在濱河造成了極大的恐慌衅檀,老刑警劉巖霎俩,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茸苇,死亡現(xiàn)場離奇詭異,居然都是意外死亡学密,警方通過查閱死者的電腦和手機腻暮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來具垫,“玉大人试幽,你說我怎么就攤上這事∑鹂恚” “怎么了济榨?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵擒滑,是天一觀的道長。 經(jīng)常有香客問我藻糖,道長库车,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮拧略,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘禽最。我一直安慰自己袱饭,他們只是感情好,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疹味,像睡著了一般。 火紅的嫁衣襯著肌膚如雪诫咱。 梳的紋絲不亂的頭發(fā)上洪灯,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天签钩,我揣著相機與錄音,去河邊找鬼哄尔。 笑死柠并,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的鸣戴。 我是一名探鬼主播粘拾,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼缰雇,長吁一口氣:“原來是場噩夢啊……” “哼追驴!你這毒婦竟也來了疏之?” 一聲冷哼從身側(cè)響起殿雪,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锋爪,沒想到半個月后丙曙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡其骄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年亏镰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拯爽。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡索抓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出某抓,到底是詐尸還是另有隱情纸兔,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布汉矿,位于F島的核電站,受9級特大地震影響备禀,放射性物質(zhì)發(fā)生泄漏洲拇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一曲尸、第九天 我趴在偏房一處隱蔽的房頂上張望赋续。 院中可真熱鬧,春花似錦另患、人聲如沸纽乱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸦列。三九已至,卻和暖如春鹏倘,著一層夾襖步出監(jiān)牢的瞬間薯嗤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工纤泵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留骆姐,地道東北人。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像玻褪,于是被迫代替她去往敵國和親肉渴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容