class Base():
def __init__(self):
print('Base',self)
class A(Base):
def __init__(self):
print('start A',self)
super(A,self).__init__()
print('end A',self)
class B(Base):
def __init__(self):
print('start B',self)
super(B,self).__init__()
print('end B',self)
class C(A,B):
def __init__(self):
print('start C',self)
super(C,self).__init__()
print('end C',self)
c=C()
print(c.__class__.mro())
结果
start C <__main__.C object at 0x02B01770>
start A <__main__.C object at 0x02B01770>
start B <__main__.C object at 0x02B01770>
Base <__main__.C object at 0x02B01770>
end B <__main__.C object at 0x02B01770>
end A <__main__.C object at 0x02B01770>
end C <__main__.C object at 0x02B01770>
[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class '__main__.Base'>, <class 'object'>]
spuer原理为
def spuer(cls,inst):
mro=inst.__class__.mro()
return mro[mro.index(cls)+1]
获取inst的mro列表,返回mro表中cls的下一个类
上述例子中,self始终为C的实例