Python super() 函数
super函数简介
通常情况下,我们在子类中定义了和父类同名的方法,那么子类的方法就会覆盖父类的方法。而super关键字实现了对父类方法的改写(增加了功能,增加的功能写在子类中,父类方法中原来的功能得以保留)。也可以说,super关键字帮助我们实现了在子类中调用父类的方法
python3和python2中super的用法稍有差别
输出如下:
super函数深入
MRO(Method Resolution Order):python对于每一个类都有一个MRO列表. 此表的生成有以下原则:子类永远在父类之前,如果有多个父类,那么按照它们在列表中的顺序被检查,如果下一个类有两个合法的选择,那么就只选择第一个
super(cls, inst):
mro = inst.__class__mro()
return mro(mro.index(cls) + 1)
super做了两件事情,获取mro列表,然后返回列表中下一个类
super(C, self).__init__()
self是C的实例,这个就返回了C的MRO列表
__main__.C,__main__.B, __main__.A, __main__.Base, object
self都是C的实例,所以才会在C的MRO列表中顺序搜索
实例如下:
输出如下:
发布于 2017-08-06 11:47