多重继承,为什么的name属性不是C0呢

class C0:
name='C0'

class C1:
num=1

class C2(C0):
num=2

class C3:
name='C3'

class C4(C1,C2,C3,C0):
pass

t=C4()
print('C4的name是:'+t.name)
print('C4的num是:'+ str(t.num) )

#为什么t.name不是C0,而是C3??

#如果把C4继承中的父类,C0去掉,那么C4的那么值又通过C2继承了C0的值‘‘C0’

2个回答

从左到右,如果类中属性已有,不会被后面类中相同属性覆盖,也就是说C3有name属性了,C0也有,不会被C0重写。

u011126065
jasondyoung 百度看看有没有研究较深的
一年多之前 回复
oGairy
BIM 刘大波 如果把C4中的C0去掉,那么那么就继承C2了,也就是C0,不知道为什么
一年多之前 回复
oGairy
BIM 刘大波 可是C2也继承了C0啊,也就name按照继承原则,应该继承C2的name值C0啊
一年多之前 回复

不知道具体原因,但是可以看出,在继承父类属性时,同一属性只接收一次继承(如C3的name不会被C0的name覆盖),但父类中继承其他类的属性(如C2中继承的C0的name属性),会被同级别中其他父类的属性覆盖(C3的name属性把C2从C0中继承的name属性的内容覆盖了)。

oGairy
BIM 刘大波 但是,如果在C4定义的时候把C0去掉,C4的name值又变为了从C2这边继承C0的‘C0’了
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐