欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(转载)Python的多重继承和super

程序员文章站 2022-05-21 11:22:05
...

super:

不要一说到 super 就想到父类!super 指的是 MRO 表中的下一个类!

这句话简直 醍醐灌顶!!!


super 其实干的是这件事:
  1. def super(cls, inst):
  2. mro = inst.__class__.mro() # Always the most derived class
  3. return mro[mro.index(cls) + 1]



两个参数 cls 和 inst 分别做了两件事:
1. inst 负责生成 MRO 的 list
2. 通过 cls 定位当前 MRO 中的 index,并返回 mro[index + 1]


总结一下:
1. super 并不是一个函数,是一个类名,形如 super(B, self) 事实上调用了 super 类的初始化函数,产生了一个 super 对象;
2. super 类的初始化函数并没有做什么特殊的操作,只是简单记录了类类型和具体实例;
3. super(B, self).func 的调用并不是用于调用当前类的父类的 func 函数;
4. Python 的多继承类是通过 mro 的方式来保证各个父类的函数被逐一调用,而且保证每个父类函数只调用一次(如果每个类都使用 super);
5. 混用 super 类和非绑定的函数是一个危险行为,这可能导致应该调用的父类函数没有调用或者一个父类函数被调用多次。
6. 用 super,遇到修改父类的名字时等情况,可以少修改代码,参考:http://www.jb51.net/article/66912.htm



博客地址: https://blog.csdn.net/damiaomiao666/article/details/51473199