python繼承類經(jīng)典算法

#! /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()

執(zhí)行的結(jié)果:

p1-foo

p2-bar

將代碼實(shí)例,畫了一個(gè)圖,方便理解:


從上面經(jīng)典類的輸出結(jié)果來看,

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • #! /usr/bin/python# -*- coding:utf-8 -*-class P1(object):...
    thebeeman閱讀 412評論 0 0
  • 1.元類 1.1.1類也是對象 在大多數(shù)編程語言中,類就是一組用來描述如何生成一個(gè)對象的代碼段。在Python中這...
    TENG書閱讀 1,306評論 0 3
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,908評論 18 139
  • 線程 1.同步概念 1.多線程開發(fā)可能遇到的問題 同步不是一起的意思,是協(xié)同步調(diào) 假設(shè)兩個(gè)線程t1和t2都要對nu...
    TENG書閱讀 626評論 0 1
  • 昨夜西風(fēng)擾我夢, 今朝困乏不想醒。 借問此時(shí)為幾更, 窗外艷陽來相迎。
    肯尼迪金閱讀 194評論 0 2