python是支持多继承的,多继承通常就会考虑到继承的顺序问题,菱形继承的问题。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
上边这段代码里B和C继承了A这是单继承,而D同时继承了B和C属于多继承。
此时D没有init构造函数,会继承父类的构造函数。
D继承了两个类,那么应该怎么继承呢?
按顺序继承先继承B的构造函数,若是B也没有构造函数,那应该继承C仍是A呢?ide
两种策略函数
到底走那种策略
这里先引入一个python里的新式类与经典类的概念code
1.在Python里凡是继承了object的类,都是新式类。
2.Python3+里只有新式类(在Python 3.x以后的版本,由于全部的类都派生自内置类型object(即便没有显示的继承object类型),即全部的类都是“新式类”。)
3.Python2+里继承object的类是新式类,没有写父类的是经典类
4.经典类目前在Python里基本没有应用blog
如今回答上个问题,该继承C仍是A继承
1. python2 中经典类是按照深度优先查找,新式类按照广度优先查找。 2. python3 中全部的类都是新式类因此都是按照广度优先来继承。
上述代码很明显是新式类,因此当B没有构造函数时继承C的构造函数,C也没有的时候继承A
若是在python2中,且为经典类的话当B没有构造函数时继承A的构造函数,A没有的时候继承Cit