码迷,mamicode.com
首页 > 编程语言 > 详细

python多继承

时间:2019-11-02 23:47:52      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:多继承   elf   广度优先   python3   两种   image   object类   查找   def   

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呢?

两种策略

  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

python多继承

标签:多继承   elf   广度优先   python3   两种   image   object类   查找   def   

原文地址:https://blog.51cto.com/14244213/2447284

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!