super

mro 初始化顺序

class A(object):
    def __init__(self, value):
        self.value = value

    def t(self):
        print('a')


class B(A):

    def __init__(self, value):
        A.__init__(self, value)
        self.value *= 5


class C(A):

    def __init__(self, value):
        A.__init__(self, value)
        self.value += 2

    def t(self):
        print('c')


class D(B, C):

    def __init__(self, value):
        B.__init__(self, value)
        C.__init__(self, value)


d = D(5) 
d.t()
print(d.value)

# c
# 7
class A(object):
    def __init__(self, value):
        self.value = value


class B(A):

    def __init__(self, value):
        super().__init__(value) 
        self.value *= 5


class C(A):

    def __init__(self, value):
        super().__init__(value) 
        self.value += 2


class D(B, C):

    def __init__(self, value):
        super().__init__(value)


d = D(5) 
print(d.value)

# 35
from pprint import pprint
pprint(D.mro()) 

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

d = D(5) 
1. 调用D.__init__方法
2. 调用B.__init__方法
3. 调用C.__init__方法
4. 调用A.__init__方法

那些__init__然后以相反的顺序来初始化