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

python参数顺序问题。

python参数顺序问题。

ruibin 2017-04-25 08:48:48
我之前在猿问上遇到了这么个问题,也不知道答案,关注了几天也没人回复,希望明白的朋友帮忙解答下,谢谢。问题如下:关于Python类的广度和深度优先问题?小白求教!class A(object):    def __init__(self):        self.a = 1    def x(self):        print "A.x"    def y(self):        print "A.y"    def z(self):        print "A.z" class B(A):    def __init__(self):        A.__init__(self)        self.a = 2        self.b = 3    def y(self):        print "B.y"    def z(self):        print "B.z" class C(object):    def __init__(self):        self.a = 4        self.c = 5    def y(self):        print "C.y"    def z(self):        print "C.z" class D(C,B):    def __init__(self):        C.__init__(self)        B.__init__(self)        self.d = 6    def z(self):        print "D.z"obj = D()print obj.aobj.y()这个代码class D(C,B)中的B和C调换位置obj.a print出来永远是2,而obj.y()会随着位置调换改变输出值感觉这既不符合深度优先也不符合广度优先?这是什么鬼??
查看完整描述

1 回答

已采纳
?
慕九州1216299

TA贡献5条经验 获得超2个赞

  1. obj.a属性值不会随着D的继承顺序改变是因为你这__init__()方法中先调用了C的init方法,再调用了B的init方法,所以总是按照B的init方法中将a属性设置为2(self.a = 2);

  2. 再说这个obj.y()方法输出会变化的问题。与属性不同,这个y是方法,由于D继承自C和B,调用D的y()方法,D类没有类方法,则在其父类中查找(查找顺序请 print(obj.__class__.__mro__)),当C首先继承后,就这C类中找到了y()方法,调用后不再往后查找。反之,D(B,C)在查找上面那个变量中的顺序,则先找到的是B类中的y()方法。所以打印结果不同。

查看完整回答
反对 回复 2017-05-14
  • 1 回答
  • 1 关注
  • 2157 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信