# 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
'''
MRO: method resolution order
Incr,Pro,Add2,Mult,HaHa,Init,Object
super()
a = Incr()
a.chi()
'''
# # print(Incr.__mro__)
# # Incr Pro Add2 Mult HaHa Init
# p = Incr(5) # p.val = 8.0
# # Add2
# # Mult
# # 哈哈
# # init
# # 5.0
# # 8.0
# print(p.val)
#
c = Add2(2) # Add2, Init, Object c.val = 2
# Add2
# init
# 2
# 4
print(c.val) # 4
#