多继承父类构造方法的执行顺序

 1 class a:
 2     def __init__(self):
 3         print('a')
 4 
 5 class b(a):
 6     def __init__(self):
 7         super().__init__()
 8         print('b')
 9 
10 class c(a):
11     def __init__(self):
12         super().__init__()
13         print('c')
14 
15 
16 class d(b,c):
17     pass
18 
19 mm=d()
20 '''
21 a
22 c
23 b
24 '''
25 
26 #分析出现这种现象
27 #继承后只有一份构造函数的代码,后面的会覆盖前面的。即c的构造函数会覆盖b的
28 
29 print('=' * 30)
30 
31 class a:
32     def __init__(self):
33         print('a')
34 
35 class b(a):
36     def __init__(self):                      #2
37         super().__init__()                   #2
38         print('b')
39 
40 class c(a):
41     def __init__(self):                        #3
42         super().__init__()                     #3
43         print('c')                             #3
44 
45 class e(b):
46     def __init__(self):
47         super().__init__()
48         print('e')
49 
50 class d(e,c):
51     pass
52 
53 ddd = d()
54 
55 '''
56 a
57 c
58 b
59 e
60 '''
61 
62 #第一个例子中 b和c的基类都是 a
63 #第二个例子中 e和c的基类不同了,但e的基类是b,b和c的基类都是 a ,e类实例化时没有继续往上实例化到a,是因为一个类一次只能实例化一个实例出来?

猜你喜欢

转载自www.cnblogs.com/avention/p/8970054.html
今日推荐