super

super() 找MRO顺序的下一个
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# class Base1:
#     def chi(self):
#         print("我是可怜的Base1")
#
# class Base2:
#     def chi(self):
#         print("我是可怜的Base2")
#
# class Base3:
#     def chi(self):
#         print("我是可怜的Base3")
#
# class Bar(Base1, Base2, Base3):
#     def chi(self):
#         print("我是Bar里面的吃1")
#         # super(类名, self) 从某个类开始找下一个MRO
#         super(Base2, self).chi() # 此时调用的super. 在Bar调用 -> super表示找MRO里的下一个
#         # super().chi() # super(Bar, self).chi()
#         print("我是Bar里面的吃2")
#
# b = Bar() # Bar, Base1, Base2, Base3, object
# b.chi()
# print(Bar.__mro__)
 
 
# class Base1:
#     def chi(self):
#         super().chi() # super找的是MRO的下一个.
#         print("我是可怜的Base1")
#
# class Base2:
#     def chi(self):
#         super().chi()
#         print("我是可怜的Base2")
#
# class Base3:
#     def chi(self):
#         print("我是可怜的Base3")
#
# class Bar(Base1, Base2, Base3):
#     def chi(self):
#         print("我是Bar里面的吃1")
#         # super(类名, self) 从某个类开始找下一个MRO
#         super(Bar, self).chi() # 此时调用的super. 在Bar调用 -> super表示找MRO里的下一个
#         # super().chi() # super(Bar, self).chi()
#         print("我是Bar里面的吃2")
#
# b = Bar() # 报错 Base1 object
# b.chi() # 报错
# # 坑
 
 
 
# MRO + super ⾯试题
class Init(object):
    def __init__(self, v): # 2
        print("init")
        self.val = v
 
class Add2(Init):
    def __init__(self, val): # 2
        print("Add2")
        super(Add2, self).__init__(val) # Mult
        print(self.val)
        self.val += 2
 
class Mult(Init):
    def __init__(self, val):
        print("Mult")
        super(Mult, self).__init__(val) # Haha
        self.val *= 5
 
class HaHa(Init):
   def __init__(self, val):
        print("哈哈")
        super(HaHa, self).__init__(val) # Init
        self.val /= 5
 
class Pro(Add2,Mult,HaHa): #
    pass
 
class Incr(Pro): # incr->pro->add2->Mult->HaHa->init
    def __init__(self, val): # 5
        super(Incr, self).__init__(val) # Add2
        self.val += 1
 
# Add2
# Mult
# 哈哈
# init
# 5.0
# 8.0
 
 
 
# Add2
# init
# 2
# 4

  

原文地址:https://www.cnblogs.com/heheda123456/p/10204830.html