python3中super函数的使用方法

super() 函数是用于调用父类(超类)的一个方法。
super() 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。

在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父类的功能,这时,我们就需要调用父类的方法了,可通过使用 super 来实现,比如

#!/usr/bin/python3
#coding:utf-8
class Base:
    def __init__(self, a):
        self.a = a
    def add(self, b):
        return self.a+b
class Child(Base):
    def test(self, b):
        r = super(Child, slef).add(b)
        print(r)
child = Child(1)
child.test(4)
打印:
5

Child是Base的子类,当我们在子类中的函数中调父类的方法时,无需再指明父类名称,这样在需要修改父类名称shif时不会影响子类的调用

MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表

super工作原理

def super(cls, inst):
    mro = inst.__class__.mro()
    return mro[mro.index(cls) + 1]

其中,cls 代表类,inst 代表实例,上面的代码做了两件事:
获取 inst 的 MRO 列表
查找 cls 在当前 MRO 列表中的 index, 并返回它的下一个类,即 mro[index + 1]
当你使用 super(cls, inst) 时,Python 会在 inst 的 MRO 列表上搜索 cls 的下一个类


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/773.html