使用方法
super(type[, object-or-type])
例子
在继承里如果不使用super会出现如下的错误
class Bird:
def __init__(self):
self.hungry = True
def eat(self):
if self.hungry:
print 'Ahahahah'
else:
print 'No thanks!'
class SongBird(Bird):
def __init__(self):
self.sound = 'Squawk'
def sing(self):
print self.song()
sb = SongBird()
sb.sing() # 能正常输出
sb.eat() # 报错,因为 songgird 中没有 hungry 特性
因此可以有两种解决方法
绑定参数
class SongBird(Bird):
def __init__(self):
Bird.__init__(self)
self.sound = 'Squawk'
def sing(self):
print self.song()
super
class SongBird(Bird):
def __init__(self):
super.__init__()
self.sound = 'Squawk'
def sing(self):
print self.song()
它会按照mro顺序查找 ,直到找到要找的为止
菱形继承例子
class A(object):
def __init__(self):
print("enter A")
print(self) # this will print <__main__.D object at 0x...>
print("leave A")
class B(A):
def __init__(self):
print("enter B")
print(self) # this will print <__main__.D object at 0x...>
super(B, self).__init__()
print("leave B")
class C(A):
def __init__(self):
print("enter C")
print(self) # this will print <__main__.D object at 0x...>
super(C, self).__init__()
print("leave C")
class D(B, C):
pass
d = D()
运行结果