首发于we use python

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