super的作用: 按照self对象人性类的的mro顺序,执行该类的下一个类。
class A:
def f1(self):
print('In a')
class Foo(A):
def f1(self):
super(Foo, self).f1()
print('In Foo')
class Bar(A):
def f1(self):
print('In Bar')
class Info(Foo, Bar):
def f1(self):
super(Info, self).f1()
print('In Info')
"""
print(Info.mro())
[Info,Foo,Bar, A,object]
super 按照self对象继承类的的mro顺序,执行info类的下一个类
"""
obj = Info()
obj.f1()
我们通过Info.mro()得到继承顺序 为Info, Foo, Bar, A, object
分析:
当obj.f1()调用时,即执行info.f1() 此时super(Info, self).f1(), 根据mro顺序,走到Foo类,执行f1,此时Foo类的super(Foo, self)中的self仍为obj,那么下一个为Bar, 执行Bar中的f1, 打印In bar, 然后会执行Foo中super的下一句 In Foo, 最后执行 In Info, 看运行结果:
(drf) andy@Andy963:/mnt/c/Users/Andy/Desktop$ python code.py
In Bar
In Foo
In Info