Python super() 函數

    super()返回一個代理對象,用於調用父類方法,調用此代理對象的方法時,查找相應方法的順序是按照__mro__列表的返回順序進行調用方法查找的。python

    so.....函數

# -*- coding:utf-8 -*-
# 2017/6/29


class A(object):

    def __init__(self):
        print "A init invoked"


class B(object):

    def __init__(self):
        print "B init invoked"


class D(object):
    def __init__(self):
        print "D init invoked"


class C(D, B, A):

    def __init__(self):
        print "C init invoked", C.mro()
        super(C, self).__init__()


c = C()
輸出:
D:\Python27\python.exe E:/workspace/lab_for_py/python-example-code/super_code/test.py
C init invoked [<class '__main__.C'>, <class '__main__.D'>, <class '__main__.B'>, <class '__main__.A'>, <type 'object'>]
D init invoked

Process finished with exit code 0

    可見super()函數參數爲C,self的時候,__init__調用的是D中的方法,那咱們換一個參數試試,將C分別換成D,B,A對應輸出分別是spa

D:B init invoked代理

B:A init invokedcode

A:無輸出對象

咱們再看一下mro的輸出utf-8

[<class '__main__.C'>, <class '__main__.D'>, <class '__main__.B'>, <class '__main__.A'>, <type 'object'>]

    可見,super(type[, object-or-type])調用的父類方法是選用的mro list相應type下一個類的方法,那麼當參數爲A的時候,輸出爲空的緣由就顯而易見了,由於當參數爲A時,實際上調用的是type類的__init__方法。it

相關文章
相關標籤/搜索