国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

python學(xué)習(xí)筆記-多重繼承和Mixin

wanghui / 1870人閱讀

摘要:優(yōu)先順序模糊多重繼承的優(yōu)先順序,方法調(diào)用順序不明確。在松本行弘的松本行弘的程序世界中介紹了中類(lèi)的幾個(gè)原則通常的繼承用單一繼承第二個(gè)以及兩個(gè)以上的父類(lèi)必須是的抽象類(lèi)中的多重繼承應(yīng)該也適用。

我們前面理解了類(lèi)。類(lèi)就是把具體事物給抽象出來(lái)。其實(shí)也有歸類(lèi)、類(lèi)別的意思。
我們舉一個(gè)例子:
人的職業(yè)有Teacher、Coder、Writer、Singer等職業(yè)
繼承關(guān)系就是:

           People
   ___________|___________
  |       |       |       |
Teacher  Coder  Writer  Singer

但是有這么一類(lèi)人比較特殊,白天上班碼代碼(Coder),晚上寫(xiě)文章(Writer),我們叫他為CoderWriter。
那么CoderWriter必須是繼承了Coder類(lèi),也繼承了Writer類(lèi)。這就是多繼承。
如果此時(shí)依舊是使用單繼承實(shí)現(xiàn)起來(lái)就會(huì)比較傻(比如在People下再定義一個(gè)CodeWriter類(lèi),繼承Coder類(lèi),然后再把Writer類(lèi)里的代碼復(fù)制過(guò)來(lái))。
但是多重繼承也不是萬(wàn)金油,也會(huì)帶淚諸多問(wèn)題:

結(jié)構(gòu)復(fù)雜化
單繼承中一個(gè)類(lèi)的父類(lèi)是什么,父類(lèi)的父類(lèi)是什么非常明確。多繼承一個(gè)類(lèi)有多個(gè)父類(lèi),父類(lèi)又有多個(gè)父類(lèi),繼承關(guān)系復(fù)雜。

優(yōu)先順序模糊
多重繼承的優(yōu)先順序,方法調(diào)用順序不明確。

功能沖突
當(dāng)父類(lèi)中有相同的方法的時(shí)候,繼承的是哪個(gè)方法不明確。

為了解決上述問(wèn)題,不同的編程方法采用不同的解決方法。
例如java采用只能extends一個(gè)父類(lèi),但是可以實(shí)現(xiàn)多個(gè)interface的方法。
python則采用Mixin的方式。
在松本行弘的《松本行弘的程序世界》中介紹了Ruby中mixin類(lèi)的幾個(gè)原則

通常的繼承用單一繼承

第二個(gè)以及兩個(gè)以上的父類(lèi)必須是Mix-in的抽象類(lèi)
python中的多重繼承應(yīng)該也適用。繼承反應(yīng)的I am,Mixin反應(yīng)的是I can。

我們可以通過(guò)Mixin的方式將某些能力添加給某一些類(lèi)。

回到上面舉例的例子。我們的繼承關(guān)系可以這么來(lái):

    People   
       |     Writable
       |        |
       Coder    |
       |      |——
       Somebody

這樣我們即保持相對(duì)單一的繼承關(guān)系,又能享受多繼承帶來(lái)的好處。

這篇文章僅僅是供自己加深理解使用,可能存在許多錯(cuò)誤。還請(qǐng)諒解。
更多的資料可以閱讀知乎上的回答:https://www.zhihu.com/questio...
或者書(shū)籍《松本行弘的程序世界》

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/38313.html

相關(guān)文章

  • 流暢的python讀書(shū)筆記-第十章-繼承優(yōu)缺點(diǎn)

    摘要:繼承的優(yōu)缺點(diǎn)推出繼承的初衷是讓新手順利使用只有專(zhuān)家才能設(shè)計(jì)出來(lái)的框架。多重繼承的真實(shí)應(yīng)用多重繼承能發(fā)揮積極作用。即便是單繼承,這個(gè)原則也能提升靈活性,因?yàn)樽宇?lèi)化是一種緊耦合,而且較高的繼承樹(shù)容易倒。 繼承的優(yōu)缺點(diǎn) 推出繼承的初衷是讓新手順利使用只有專(zhuān)家才能設(shè)計(jì)出來(lái)的框架?!狝lan Kay 子類(lèi)化內(nèi)置類(lèi)型很麻煩 (如 list 或 dict)) ,別搞這種 直接子類(lèi)化內(nèi)置類(lèi)型(如 ...

    morgan 評(píng)論0 收藏0
  • Python學(xué)習(xí)之路31-繼承的利弊

    摘要:使用抽象基類(lèi)顯示表示接口如果類(lèi)的作用是定義接口,應(yīng)該將其明確定義為抽象基類(lèi)。此外,抽象基類(lèi)可以作為其他類(lèi)的唯一基類(lèi),混入類(lèi)則決不能作為唯一的基類(lèi),除非這個(gè)混入類(lèi)繼承了另一個(gè)更具體的混入這種做法非常少見(jiàn)。 《流暢的Python》筆記本篇是面向?qū)ο髴T用方法的第五篇,我們將繼續(xù)討論繼承,重點(diǎn)說(shuō)明兩個(gè)方面:繼承內(nèi)置類(lèi)型時(shí)的問(wèn)題以及多重繼承。概念比較多,較為枯燥。 1. 繼承內(nèi)置類(lèi)型 內(nèi)置類(lèi)型...

    tinylcy 評(píng)論0 收藏0
  • REST API設(shè)計(jì)理念與 Python Mixin模式

    摘要:飛機(jī)就是一種交通工具,可飛行的能力是是飛機(jī)的屬性,通過(guò)繼承接口來(lái)獲取語(yǔ)言可沒(méi)有接口功能,但是它可以多重繼承。說(shuō)是,因?yàn)閺恼Z(yǔ)法上看,的確是通過(guò)多重繼承實(shí)現(xiàn)的。所以從含義上理解,只是一個(gè),不是一個(gè)。比如飛機(jī)照樣可以載客,就是不能飛了 REST API設(shè)計(jì)理念 showImg(https://segmentfault.com/img/remote/1460000019923606);sho...

    waruqi 評(píng)論0 收藏0
  • REST API設(shè)計(jì)理念與 Python Mixin模式

    摘要:飛機(jī)就是一種交通工具,可飛行的能力是是飛機(jī)的屬性,通過(guò)繼承接口來(lái)獲取語(yǔ)言可沒(méi)有接口功能,但是它可以多重繼承。說(shuō)是,因?yàn)閺恼Z(yǔ)法上看,的確是通過(guò)多重繼承實(shí)現(xiàn)的。所以從含義上理解,只是一個(gè),不是一個(gè)。比如飛機(jī)照樣可以載客,就是不能飛了 REST API設(shè)計(jì)理念 showImg(https://segmentfault.com/img/remote/1460000019923606);sho...

    iflove 評(píng)論0 收藏0
  • Python學(xué)習(xí)之路8.2-對(duì)Python類(lèi)的補(bǔ)充

    摘要:本章主要是對(duì)上一章類(lèi)的補(bǔ)充。對(duì)于多態(tài)的補(bǔ)充子類(lèi)可以被看成是父類(lèi)的類(lèi)型,但父類(lèi)不能被看成是子類(lèi)的類(lèi)型。仍然以類(lèi)為例,動(dòng)物里有哺乳動(dòng)物,卵生動(dòng)物,有能飛的動(dòng)物和不能飛的動(dòng)物,這是兩種大的分類(lèi)方式。一般在中,以為結(jié)尾類(lèi)的都作為接口。 《Python編程:從入門(mén)到實(shí)踐》筆記。本章主要是對(duì)上一章Python類(lèi)的補(bǔ)充。 1. 從一個(gè)類(lèi)派生出所有類(lèi) 上一篇文章說(shuō)道Python類(lèi)的定義與繼承一般是如下...

    liukai90 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<