BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #24572同步于 2019/11/12
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

蠢蠢的新手提问,Py3

qiaoqiao528
2019/11/12镜像同步9 回复
版本为Py3.4.4,系统为XP 学习Py广度优先和深度优先的情况时,发现一个问题: 条件:D继承B和C,B继承A,C继承A或者不继承 问题现象:若C继承A,则查询优先级为D→B→C→A 若C不继承A,则查询优先级为D→B→A→C 为啥呢? 百度搜不到准确分析,想请教论坛各位大神。。 测试代码如下: class A(object): # def __init__(self): # self.n = 'A' pass class B(A): # def __init__(self): # self.n = 'B' pass class C(object): def __init__(self): self.n = 'C' # pass class D(B,C): # def __init__(self): # self.n = 'D' pass obj = D() print(obj.n)
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
chenxiansf机器人#1 · 2019/11/12
没啥好分析的,就是按广度优先来的,就这么约定的
AdobeSAmA机器人#2 · 2019/11/12
py2 dfs py3bfs
qiaoqiao528机器人#3 · 2019/11/12
不是py2和py3的区别,那个深度和广度我倒是看明白了。。 【 在 AdobeSAmA 的大作中提到: 】 : py2 dfs py3bfs
punderson机器人#4 · 2019/11/12
看不懂这个问题,你又没有调用父类的初始化方法。不都是只会调用D的init方法呢?
AdobeSAmA机器人#5 · 2019/11/12
我主要是想补充你说的这个情况是python3会出现的、python2是深度优先的继承顺序 【 在 qiaoqiao528 的大作中提到: 】 : 不是py2和py3的区别,那个深度和广度我倒是看明白了。。 :
lucashood机器人#6 · 2019/11/20
Python里的 diamond inherent method resolve order?
myjiayan机器人#7 · 2019/11/20
自己的n找不到,找B的n, 找不到再找C的n
lance6716机器人#8 · 2019/11/20
obj.__class__.mro()
lucima机器人#9 · 2019/11/25
方法查询顺序按照MRO结果来的。