super函数做的事情
def supper(cls, inst): mro = inst.__class__.mro() return mro[mro.index(cls) + 1]
inst生成父类的列表
从列表中找到cls的索引,然后返回其下一个索引
假设
mro = [a,b,c]
cls = b
那么cls的索引为1
返回的是其下一个索引也就是mro[2]即c
mro 全程是Method Resolution Order
方法返回的是inst的所有的父类,
顺序是
假设a是基类,b,c都是a的子类,d继承了b和c(继承顺序是b,c)
那么d的mro返回的是
[d,b,c,a]
对d使用super(d,self)方法返回的是b
更详细内容请参看python cookbook
http://python3-cookbook.readthedocs.io/zh_CN/latest/c08/p07_calling_method_on_parent_class.html