class A(object):
def __init__(self):
self.a = 'a'
def a_func(self):
print(f"Class A self.a={self.a}")
class B(A):
def __init__(self):
self.b = 'b'
super(B, self).__init__()
def a_func(self):
print(f"Class B self.b={self.b}")
super(B, self).a_func()
class C(A):
def __init__(self):
self.c = 'c'
super(C, self).__init__()
def a_func(self):
print(f"Class C self.c={self.c}")
super(C, self).a_func()
class D(B, C):
def __init__(self):
self.d = 'd'
super(D, self).__init__()
def a_func(self):
print(f"Class D self.d={self.d}")
super(D, self).a_func()
if __name__ == '__main__':
d_obj = D()
d_obj.a_func()
运行结果:
Class D self.d=d
Class B self.b=b
Class C self.c=c
Class A self.a=a
进程已结束,退出代码0
理解:

首先生成class D的实例d_obj,然后调用实例方法a_func()
由于class D存在方法a_func(),所以首先执行类D中的a_func()
由于class D中的a_func()存在super().a_func(),所以向上查找父类中的a_func()
由于class D(B, C)的继承顺序为B,C,所以先查找并执行class B中的a_func(),此时相当于把class B中的a_func()中的代码放在class D的a_func()中的super().a_func()位置执行。
由于class B中的a_func()存在super().a_func(),又因为执行class B中的a_func()时,执行的位置相当于是class D的a_func()中的super().a_func()位置,所以需要向上查找父类中的a_func()
而class B中的a_func()已经执行过了,所以开始查找并执行class C中的a_func(),此时,仍然相当于把class C中的a_func()中的代码放在class D的a_func()中的super().a_func()位置执行。
由于class C中的a_func()存在super().a_func(),又因为执行class C中的a_func()时,执行的位置相当于是class D的a_func()中的super().a_func()位置,所以需要向上查找父类中的a_func()
而class B, class C中的a_func()已经执行过了,而class C继承自class A,也就是说class D的下一层父类为class A,所以先查找并执行class A中的a_func(),此时相当于把class A中的a_func()中的代码放在class D的a_func()中的super().a_func()位置执行。由于class A直接继承自根类object,所以至此执行完毕。