为了账号安全,请及时绑定邮箱和手机立即绑定

为什么顺序是 A..C..B..D.. 而不是 A...B...C...D ?

这个顺是怎么来的 ?

正在回答

3 回答

这个应该涉及到Python新式类和旧式类的问题,Python2.2之前用的是旧式类,2.2以后统一为新式类,

这两个的重要区别之一就在于调用的不同,旧式类强调深度优先,新式类强调广度优先。


0 回复 有任何疑惑可以回复我~

父类的初始化函数会先执行  ,最后才是 自己的初始化函数

super(D, self).__init__(a)

这句话,即先调用了 B C 的初始化,而B C 的初始化 又调用的 A 的 ,A的初始化有print 'init A...' 所以先输出 init A。 接下来  D 调用B C初始化

那到底是先调用B 或者 C 呢?看这个class D(B, C),右边的参数先传入,即先调用了C。你可以试下B、C换下顺序 就明白了


4 回复 有任何疑惑可以回复我~
#1

慕粉1462109115

对,这是编译原理的知识了
2016-05-05 回复 有任何疑惑可以回复我~
#2

空城盼故人 回复 慕粉1462109115

为什么右边的参数先传入?这属编译原理范畴是么?
2016-05-16 回复 有任何疑惑可以回复我~
#3

赛雷feng

为什么下面这段代码中的 D(B,C) B和C的顺序怎么调换都是输出A...B...C...D...呢? class A(object): print ('A...') class B(A): print('B...') class C(A): print('C...') class D(B,C): print("D...") d=D()
2016-10-10 回复 有任何疑惑可以回复我~
#4

魔luck 回复 赛雷feng

你用的print(),创建类的时候就会输出。不用调用,也是输出A...B...C...D...的
2017-03-27 回复 有任何疑惑可以回复我~
#5

放学路上的小学生 回复 赛雷feng

你这是模块里的print()方法啊,顺序输出。是系统的方法,又不是ABCD中定义的方法,和继承没有关系。
2017-05-02 回复 有任何疑惑可以回复我~
查看2条回复

??哪个。具体代码

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

为什么顺序是 A..C..B..D.. 而不是 A...B...C...D ?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信