成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python繼承與多重繼承

Euphoria / 1233人閱讀

摘要:記住以下幾點(diǎn)直接子類化內(nèi)置類型如或容易出錯(cuò)因?yàn)閮?nèi)置類型的方法通常會(huì)忽略用戶覆蓋的方法不要子類化內(nèi)置類型用戶自定義的類應(yīng)該繼承模塊錯(cuò)誤案例錯(cuò)誤案例正確案例正確案例多重繼承有關(guān)的另一個(gè)問(wèn)題就是如果同級(jí)別的超類定義了同名屬性如何確定使用哪個(gè)輸出

記住以下幾點(diǎn):

直接子類化內(nèi)置類型(如dict,liststr)容易出錯(cuò),因?yàn)閮?nèi)置類型的方法通常會(huì)忽略用戶覆蓋的方法,不要子類化內(nèi)置類型,用戶自定義的類應(yīng)該繼承collections模塊.

    def __setitem__(self, key, value):
        super().__setitem__(key, [value] * 2) # 錯(cuò)誤案例


class AnswerDict(dict):
    def __getitem__(self, item): # 錯(cuò)誤案例
        return 42


import collections


class DoppelDict2(collections.UserDict): # 正確案例
    def __setitem__(self, key, value):
        super().__setitem__(key, [value] * 2)


class AnswerDict2(collections.UserDict): # 正確案例
    def __getitem__(self, item):
        return 42

多重繼承有關(guān)的另一個(gè)問(wèn)題就是:如果同級(jí)別的超類定義了同名屬性.Python如何確定使用哪個(gè)?

class DoppelDict(dict):
    def __setitem__(self, key, value):
        super().__setitem__(key, [value] * 2)


class AnswerDict(dict):
    def __getitem__(self, item):
        return 42


import collections


class DoppelDict2(collections.UserDict):
    def __setitem__(self, key, value):
        super().__setitem__(key, [value] * 2)


class AnswerDict2(collections.UserDict):
    def __getitem__(self, item):
        return 42


class A:
    def ping(self):
        print("Ping:", self)


class B(A):
    def pong(self):
        print("pong:", self)


class C(A):
    def pong(self):
        print("PONG:", self)


class D(B, C):
    def ping(self):
        super().ping()
        print("post-ping:", self)

    def pingpong(self):
        self.ping()
        super().ping()
        self.pong()
        super().pong()
        C.pong(self)
if __name__ == "__main__":

    d = D()
    print(d.pong()) # 輸出來(lái)源于B
    print(C.pong(d)) #輸出來(lái)源于C 超類的方法都可以直接調(diào)用,此時(shí)要把實(shí)例作為顯示參數(shù)傳入.

python能區(qū)別調(diào)用的是哪個(gè)方法,通過(guò)方法解析順序
>>> D.mro()
[, , , , ]
若想把方法調(diào)用委托給超類,推薦的方式是使用內(nèi)置的super()函數(shù).

以下是對(duì)于d.pingpong()方法的解讀

>>> self.ping()

Ping: <__main__.D object at 0x000002213877F2B0> post-ping: <__main__.D object at 0x000002213877F2B0> 第一個(gè)調(diào)用的是self.ping(),運(yùn)行的是是D類的ping,方法.

第二個(gè)調(diào)用的的是super().ping(),跳過(guò)D類的ping方法,找到A類的ping方法.Ping: <__main__.D object at 0x000002213877F2B0>

第三個(gè)調(diào)用的是self.pong()方法,根據(jù)__mro__,找到B類實(shí)現(xiàn)的pong方法. pong: <__main__.D object at 0x000002213877F2B0>

第四個(gè)調(diào)用時(shí)super().pong(),也是根據(jù)__mro__,找到B類實(shí)現(xiàn)的pong方法. pong: <__main__.D object at 0x000002213877F2B0>

第五個(gè)調(diào)用的是C.pong(self),忽略了__mro__,找到的是C類實(shí)現(xiàn)的pong方法. PONG: <__main__.D object at 0x000002213877F2B0>

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42426.html

相關(guān)文章

  • 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類的補(bǔ)充

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

    liukai90 評(píng)論0 收藏0
  • python學(xué)習(xí)筆記-多重繼承和Mixin

    摘要:優(yōu)先順序模糊多重繼承的優(yōu)先順序,方法調(diào)用順序不明確。在松本行弘的松本行弘的程序世界中介紹了中類的幾個(gè)原則通常的繼承用單一繼承第二個(gè)以及兩個(gè)以上的父類必須是的抽象類中的多重繼承應(yīng)該也適用。 我們前面理解了類。類就是把具體事物給抽象出來(lái)。其實(shí)也有歸類、類別的意思。我們舉一個(gè)例子:人的職業(yè)有Teacher、Coder、Writer、Singer等職業(yè)繼承關(guān)系就是: Pe...

    wanghui 評(píng)論0 收藏0
  • Python繼承的優(yōu)缺點(diǎn)

    摘要:本文重點(diǎn)不要試圖在內(nèi)置類型的子類中重寫方法,可以繼承的可拓展類尋求變通掌握多重繼承中的和了解處理多重繼承的一些建議。子類化的代碼如下輸出小結(jié)上述問(wèn)題只發(fā)生在語(yǔ)言實(shí)現(xiàn)的內(nèi)置類型子類化情況中,而且只影響直接繼承內(nèi)置類型的自定義類。 導(dǎo)語(yǔ):本文章記錄了本人在學(xué)習(xí)Python基礎(chǔ)之面向?qū)ο笃闹攸c(diǎn)知識(shí)及個(gè)人心得,打算入門Python的朋友們可以來(lái)一起學(xué)習(xí)并交流。 本文重點(diǎn): 1、不要試圖在內(nèi)置...

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

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

0條評(píng)論

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