摘要:優(yōu)先順序模糊多重繼承的優(yōu)先順序,方法調用順序不明確。在松本行弘的松本行弘的程序世界中介紹了中類的幾個原則通常的繼承用單一繼承第二個以及兩個以上的父類必須是的抽象類中的多重繼承應該也適用。
我們前面理解了類。類就是把具體事物給抽象出來。其實也有歸類、類別的意思。
我們舉一個例子:
人的職業(yè)有Teacher、Coder、Writer、Singer等職業(yè)
繼承關系就是:
People ___________|___________ | | | | Teacher Coder Writer Singer
但是有這么一類人比較特殊,白天上班碼代碼(Coder),晚上寫文章(Writer),我們叫他為CoderWriter。
那么CoderWriter必須是繼承了Coder類,也繼承了Writer類。這就是多繼承。
如果此時依舊是使用單繼承實現(xiàn)起來就會比較傻(比如在People下再定義一個CodeWriter類,繼承Coder類,然后再把Writer類里的代碼復制過來)。
但是多重繼承也不是萬金油,也會帶淚諸多問題:
結構復雜化
單繼承中一個類的父類是什么,父類的父類是什么非常明確。多繼承一個類有多個父類,父類又有多個父類,繼承關系復雜。
優(yōu)先順序模糊
多重繼承的優(yōu)先順序,方法調用順序不明確。
功能沖突
當父類中有相同的方法的時候,繼承的是哪個方法不明確。
為了解決上述問題,不同的編程方法采用不同的解決方法。
例如java采用只能extends一個父類,但是可以實現(xiàn)多個interface的方法。
python則采用Mixin的方式。
在松本行弘的《松本行弘的程序世界》中介紹了Ruby中mixin類的幾個原則
通常的繼承用單一繼承
第二個以及兩個以上的父類必須是Mix-in的抽象類
python中的多重繼承應該也適用。繼承反應的I am,Mixin反應的是I can。
我們可以通過Mixin的方式將某些能力添加給某一些類。
回到上面舉例的例子。我們的繼承關系可以這么來:
People | Writable | | Coder | | |—— Somebody
這樣我們即保持相對單一的繼承關系,又能享受多繼承帶來的好處。
這篇文章僅僅是供自己加深理解使用,可能存在許多錯誤。還請諒解。
更多的資料可以閱讀知乎上的回答:https://www.zhihu.com/questio...
或者書籍《松本行弘的程序世界》
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/38313.html
摘要:繼承的優(yōu)缺點推出繼承的初衷是讓新手順利使用只有專家才能設計出來的框架。多重繼承的真實應用多重繼承能發(fā)揮積極作用。即便是單繼承,這個原則也能提升靈活性,因為子類化是一種緊耦合,而且較高的繼承樹容易倒。 繼承的優(yōu)缺點 推出繼承的初衷是讓新手順利使用只有專家才能設計出來的框架。——Alan Kay 子類化內置類型很麻煩 (如 list 或 dict)) ,別搞這種 直接子類化內置類型(如 ...
摘要:使用抽象基類顯示表示接口如果類的作用是定義接口,應該將其明確定義為抽象基類。此外,抽象基類可以作為其他類的唯一基類,混入類則決不能作為唯一的基類,除非這個混入類繼承了另一個更具體的混入這種做法非常少見。 《流暢的Python》筆記本篇是面向對象慣用方法的第五篇,我們將繼續(xù)討論繼承,重點說明兩個方面:繼承內置類型時的問題以及多重繼承。概念比較多,較為枯燥。 1. 繼承內置類型 內置類型...
摘要:飛機就是一種交通工具,可飛行的能力是是飛機的屬性,通過繼承接口來獲取語言可沒有接口功能,但是它可以多重繼承。說是,因為從語法上看,的確是通過多重繼承實現(xiàn)的。所以從含義上理解,只是一個,不是一個。比如飛機照樣可以載客,就是不能飛了 REST API設計理念 showImg(https://segmentfault.com/img/remote/1460000019923606);sho...
摘要:飛機就是一種交通工具,可飛行的能力是是飛機的屬性,通過繼承接口來獲取語言可沒有接口功能,但是它可以多重繼承。說是,因為從語法上看,的確是通過多重繼承實現(xiàn)的。所以從含義上理解,只是一個,不是一個。比如飛機照樣可以載客,就是不能飛了 REST API設計理念 showImg(https://segmentfault.com/img/remote/1460000019923606);sho...
摘要:本章主要是對上一章類的補充。對于多態(tài)的補充子類可以被看成是父類的類型,但父類不能被看成是子類的類型。仍然以類為例,動物里有哺乳動物,卵生動物,有能飛的動物和不能飛的動物,這是兩種大的分類方式。一般在中,以為結尾類的都作為接口。 《Python編程:從入門到實踐》筆記。本章主要是對上一章Python類的補充。 1. 從一個類派生出所有類 上一篇文章說道Python類的定義與繼承一般是如下...
閱讀 1916·2021-11-25 09:43
閱讀 1418·2021-11-22 14:56
閱讀 3286·2021-11-22 09:34
閱讀 2019·2021-11-15 11:37
閱讀 2272·2021-09-01 10:46
閱讀 1407·2019-08-30 15:44
閱讀 2302·2019-08-30 13:15
閱讀 2403·2019-08-29 13:07