• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

python参数顺序问题。

我之前在天盟上遇到了这么个问题,也不知道答案,关注了几天也没人回复,希望明白的朋友帮忙解答下,谢谢。问题如下:
关于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.a
obj.y()
这个代码class D(C,B)中的B和C调换位置obj.a
print出来永远是2,而obj.y()会随着位置调换改变输出值
感觉这既不符合深度优先也不符合广度优先?这是什么鬼??

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

全部参与1


  • obj.a属性值不会随着D的继承顺序改变是因为你这__init__()方法中先调用了C的init方法,再调用了B的init方法,所以总是按照B的init方法中将a属性设置为2(self.a = 2);
  • 再说这个obj.y()方法输出会变化的问题。与属性不同,这个y是方法,由于D继承自C和B,调用D的y()方法,D类没有类方法,则在其父类中查找(查找顺序请 print(obj.__class__.__mro__)),当C首先继承后,就这C类中找到了y()方法,调用后不再往后查找。反之,D(B,C)在查找上面那个变量中的顺序,则先找到的是B类中的y()方法。所以打印结果不同。

使用道具 举报

发新帖

发布任务需求已有1031168位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!