美文网首页
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与继承关系

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

  • [self class]和[super class]

    问题 Teacher继承Person,Person继承NSObject,super与self调用class方法打印...

  • Java -

    示例类的继承关系如下所示: 1. 表示类型下界,表示参数化类型是此...

  • 继承

    继承 1. super关键字的学习 逻辑关系:Manager继承Employee成为Employee的一个子类Ma...

  • Python进阶-继承中的MRO与super

    Python进阶-继承中的MRO与super @(Python)[python, python进阶] [TOC] ...

  • Python继承

    super() 继承顺序

  • super||继承

    =========== super注意点: ===首选需要注意一下几个点: ~1、super调用父类的构造方法时。...

  • (二)继承

    1.继承写法 公共继承(父类) 继承公共函数(子类) 2.super&this 1.我们可以通过super关键字来...

  • 8、TypeScript面向对象特性

    一、类 等同于: 执行结果: 二、类的继承 两个关键字:1、extends:用来声明类的继承关系2、super:用...

  • Python的继承

    #Python继承的特点 总是从某个类继承 不要忘记调用 super().init 一定要用 super(Teac...

网友评论

      本文标题:super与继承关系

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