python多继承
admin
2023-06-30 10:44:15
0

python是支持多继承的,多继承一般就会考虑到继承的顺序问题,菱形继承的问题。


class A(object):
    def __init__(self, name):
        self.name = name
        print ("in A")

class B(A):
    def __init__(self, name):
        self.name = name
        print ("in B")

class C(A):
    def __init__(self, name):
        self.name = name
        print ("in C")

class D(B,C):
    pass
obj = D('myname')

结果输出:
in B

python多继承

上边这段代码里B和C继承了A这是单继承,而D同时继承了B和C属于多继承。
此时D没有init构造函数,会继承父类的构造函数。
D继承了两个类,那么应该怎么继承呢?
按顺序继承先继承B的构造函数,如果B也没有构造函数,那应该继承C还是A呢?

两种策略

  1. 广度优先
  2. 深度优先

到底走那种策略
这里先引入一个python里的新式类与经典类的概念

1.在Python里凡是继承了object的类,都是新式类。
2.Python3+里只有新式类(在Python 3.x之后的版本,因为所有的类都派生自内置类型object(即使没有显示的继承object类型),即所有的类都是“新式类”。)
3.Python2+里继承object的类是新式类,没有写父类的是经典类
4.经典类目前在Python里基本没有应用

现在回答上个问题,该继承C还是A

1. python2 中经典类是按照深度优先查找,新式类按照广度优先查找。
2. python3 中所有的类都是新式类所以都是按照广度优先来继承。

上述代码很明显是新式类,所以当B没有构造函数时继承C的构造函数,C也没有的时候继承A
如果在python2中,且为经典类的话当B没有构造函数时继承A的构造函数,A没有的时候继承C

相关内容

热门资讯

一颗流星在美国马萨诸塞州上空爆... 当地时间5月30日,一颗流星在美国东北部马萨诸塞州近海上空爆炸,并引发巨响。该州多地居民均听到爆炸声...
鸿蒙智家框架合作协议签约仪式在... 5月29日,鲁班兄弟装饰工程有限公司与华为终端有限公司在华为云南区域总部举行鸿蒙智家框架合作协议签约...
中国科学院工程热物理所在超临界... 以超临界二氧化碳(S-CO₂)为代表的新型超临界流体正以其独特优势,在制冷、发电、储能等领域拓展应用...
5月31日,“蓝月亮”上线 5月31日,农历四月十五,一轮满月将现身夜空。这轮满月有些特别,它是本月第二次满月,同时它又是本年度...
原创 华... 华为在6月份的新品越来越丰富,比如智能手机、智能手表、耳夹式耳机、新一代全屋智能等,覆盖到多场景。其...
伊朗称对霍尔木兹海峡航运实施全... 据伊朗方面当地时间5月30日消息,伊朗武装部队哈塔姆安比亚中央总部说,伊朗对霍尔木兹海峡航运实施全面...
13人遇难“致命黑车”调查:座... 5月28日凌晨,一辆载满河南邓州周边等地乘客的大通客车,从浙江杭州出发赶回邓州,经过G40沪陕高速河...
多地职校招生报名火爆 作者 | 第一财经 林靖职业教育正在成为越来越多人的“主动选择”,中职赛道不再是备选项。近日,北京中...
初一男生校门口遭群殴或失聪,教... 哥哥同学辱骂母亲,辽宁鞍山13岁少年在学校门口维护哥哥与人发生争执,随后数名同龄少年一拥而上对其实施...
演唱会大量邀请票被当众焚毁,警... 极目新闻记者 杜光然5月29日,网友发帖称,有人当众焚烧大量演唱会邀请票,视频定位于温岭市体育中心。...