super实现原理:通过c3算法,生成mro(method resolution order)列表,根据列表中元素顺序查询调用
super()不是指父类 而是指以实例化对象为起点的mro序列中的下一个
简洁点的三个原则就是:
子类在父类前,所有类不重复调用,从左到右
class Parent(object):
def __init__(self,name):
print('parent的init开始被调用')
self.name = name
print('parent的init结束被调用')
class Son1(Parent):
def __init__(self,name,age):
print('Son1的init开始被调用')
self.age = age
Parent.__init__(self,name)
print('Son1的init结束被调用')
class Son2(Parent):
def __init__(self,name,gender):
print('Son2的init开始被调用')
self.gender = gender
Parent.__init__(self,name)
print('Son2的init结束被调用')
class Grandson(Son1,Son2):
def __init__(self,name,age,gender):
print('grandson的init开始被调用')
Son1.__init__(self,name,age)
Son2.__init__(self,name,gender)
print('grandson的init结束被调用')
gs = Grandson('grandson',18,'男')
print('姓名:',gs.name)
print('年龄:',gs.age)
print('性别:',gs.gender)
class A():
def go(self):
print ("go A go!")
def stop(self):
print ("stop A stop!")
def pause(self):
raise Exception("Not Implemented")
class B(A):
def go(self):
super(B, self).go()
print ("go B go!")
class C(A):
def go(self):
super(C, self).go()
print ("go C go!")
def stop(self):
super(C, self).stop()
print ("stop C stop!")
class D(B,C):
def go(self):
super(D, self).go()
print ("go D go!")
def stop(self):
super(D, self).stop()
print ("stop D stop!")
def pause(self):
print ("wait D wait!")
class E(B,C):
pass
a = A()
a.go()
a.stop()
b = B()
b.go()
c = C()
d = D()
e = E()