麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

python中的多重繼承實例講解

2020-02-23 05:52:32
字體:
來源:轉載
供稿:網友

python和C++一樣,支持多繼承。概念雖然容易,但是困難的工作是如果子類調用一個自身沒有定義的屬性,它是按照何種順序去到父類尋找呢,尤其是眾多父類中有多個都包含該同名屬性。

對經典類和新式類來說,屬性的查找順序是不同的。現在我們分別看一下經典類和新式類兩種不同的表現:

經典類:

代碼如下:
#! /usr/bin/python
# -*- coding:utf-8 -*-

class P1():
    def foo(self):
        print 'p1-foo'

class P2():
    def foo(self):
        print 'p2-foo'
    def bar(self):
        print 'p2-bar'

class C1(P1,P2):
    pass

class C2(P1,P2):
    def bar(self):
        print 'C2-bar'

class D(C1,C2):
    pass


if __name__ =='__main__':
    d=D()
    d.foo()
    d.bar()

執行的結果:

代碼如下:
p1-foo
p2-bar

將代碼實例,畫了一個圖,方便理解:

從上面經典類的輸出結果來看,

實例d調用foo()時,搜索順序是 D => C1 => P1,

實例d調用bar()時,搜索順序是 D => C1 => P1 => P2

總結:經典類的搜索方式是按照“從左至右,深度優先”的方式去查找屬性。d先查找自身是否有foo方法,沒有則查找最近的父類C1里是否有該方法,如果沒有則繼續向上查找,直到在P1中找到該方法,查找結束。

新式類:

代碼如下:
#! /usr/bin/python
# -*- coding:utf-8 -*-

class P1(object):
    def foo(self):
        print 'p1-foo'
       
class P2(object):
    def foo(self):
        print 'p2-foo'
    def bar(self):
        print 'p2-bar'
       
class C1(P1,P2):
    pass
   
class C2(P1,P2):
    def bar(self):
        print 'C2-bar'
       
class D(C1,C2):
    pass
   

if __name__ =='__main__':
    print D.__mro__   #只有新式類有__mro__屬性,告訴查找順序是怎樣的
    d=D()
    d.foo()
    d.bar()

執行的結果:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日本成人一区二区 | 毛片电影在线看 | 调教小男生抽打尿孔嗯啊视频 | 斗罗破苍穹在线观看免费完整观看 | 国产一区日韩精品 | 国产毛毛片一区二区三区四区 | 成人精品一区二区 | 日韩精品99久久久久久 | 久草在线手机视频 | 久夜tv | 欧美成人免费电影 | 福利在线国产 | 最新se94se在线欧美 | 男女生羞羞视频网站在线观看 | 草操视频 | 国产成人精品免高潮在线观看 | 视频一区二区久久 | 海外中文字幕在线观看 | 日本免费a∨ | 国产精品视频免费网站 | 国产在线观看一区二区三区 | 日本不卡一区二区在线观看 | 日韩视频二区 | 激情大乳女做爰办公室韩国 | 久久久久久三区 | 国产va在线观看免费 | 久久久国产一级片 | 人人舔人人插 | 国内精品久久久久影院不卡 | 亚洲视频在线网 | 精品一区二区视频在线观看 | 亚洲午夜精选 | 自拍偷拍999| 美女视频免费一区二区 | 久久精品网站视频 | 国产精品成aⅴ人片在线观看 | 精品一区二区三区在线观看国产 | 久久一本日日摸夜夜添 | 毛片在线视频在线播放 | 狠狠久久伊人中文字幕 | 欧美aⅴ在线观看 |