美文网首页
super与继承关系

super与继承关系

作者: 漓江塔塔主 | 来源:发表于2018-07-27 10:25 被阅读0次

    super函数是一个很好的改写父类的方法,前几天刚好接触到了这个函数,就研究了一下。

    用法

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

    super的语法比较简单:super(type[, object-or-type]),参数 type -- 类 object-or-type -- 类,一般是 self 。
    Python3.x 和 Python2.x 的一个区别是: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx :
    实例:

    class A:
        def __init__(self):
            print('A')
    class B(A):
        def __init__(self):
            super().__init__()#假设要是python2就应当写super(B,self).__init__
            print('B')
    b=B()
    

    它的本意就是对父类的方法进行拓展,不必直接到父类的代码进行修改。

    一些拓展

    单纯的讨论super函数其实没有问题,但是一旦涉及到多重继承,就涉及到python中的继承问题

    深度优先与广度优先

    首先无论是深度优先还是广度优先,在调用时会率先调用最近的类。例如class B(A,C,D)就会先调用A,再调用C,最后是D。
    python3中优先采用的继承顺序是广度优先,在查询时率先把本层的全部查询完才进入下一层


    图一
    图二

    例如上面两个图,图一的调用顺序就是A>B>C>D>E,图二就是A>B>C>D
    而在python2中,默认经典类,采用的是深度优先的算法。查询时,先走一条路走到最深层次,才走另一条路。对应到上图就是A>B>D>C>E,A>B>D>C。

    相关文章

      网友评论

          本文标题:super与继承关系

          本文链接:https://www.haomeiwen.com/subject/slapmftx.html