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

相关文章
相关标签/搜索