不要一说到 super 就想到父类!super 指的是 MRO 中的下一个类!
class Root(object):def __init__(self):print("this is Root")class B(Root):def __init__(self):print("enter B")# print(self) # this will print <__main__.D object at 0x...>super(B, self).__init__()print("leave B")class C(Root):def __init__(self):print("enter C")super(C, self).__init__()print("leave C")class D(B, C):passd = D()print(d.__class__.__mro__)
enter Benter Cthis is Rootleave Cleave B(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.Root'>, <type 'object'>)
首先,我们获取 self.class.mro,注意这里的 self 是 D 的 instance 而不是 B 的
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.Root'>, <type 'object'>)
