python super原理,不是指父類

來源:互聯網
上載者:User

標籤:nbsp   pyqt   ini   self   dex   原理   執行   post   父類   

class a(object):    def __init__(self):        print(‘in a‘)class b(a):    def __init__(self):        print(‘in b‘)        super().__init__()        print(‘out b‘)class c(a):    def __init__(self):        print(‘in c‘)        super().__init__()        print(‘out c‘)class d(b, c):    def __init__(self):        print(‘in d‘)        super().__init__()        print(‘out d‘)a = d()print(a.__class__.mro())

每個對象都有個屬性__class__.mro()

mro是method resolve order的縮寫

代碼中是寫的super().__init__()

super()這種寫法是super(當前類名,self)的簡寫

 

然後我們直接來看看這段代碼執行的結果

[Running] python "d:\pyqt5\signal.py"in din bin cin aout cout bout d(<class ‘__main__.d‘>, <class ‘__main__.b‘>, <class ‘__main__.c‘>, <class ‘__main__.a‘>, <class ‘object‘>)

為啥中間會輸出c?

c並不是b的父類啊

super其實乾的是下面這件事

def super(cls, inst):    mro = inst.__class__.mro()    return mro[mro.index(cls) + 1]

就是在mro列表中去找下一個類,所以會產生這種輸出

python super原理,不是指父類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.