从品牌网站建设到网络营销策划,从策略到执行的一站式服务
python是支持多继承的,多继承一般就会考虑到继承的顺序问题,菱形继承的问题。
我们提供的服务有:网站设计、网站建设、微信公众号开发、网站优化、网站认证、西夏ssl等。为千余家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的西夏网站制作公司
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呢?
两种策略
到底走那种策略
这里先引入一个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
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图