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

如果D继承自B,C,而B,C继承自A。A,B,C中都定义了新的属性。在D中如何使用super传参初始化?

class A(object):
    def __init__(self, a):
        print 'init A...'
        self.a = a

class B(A):
    def __init__(self, a , b):
        super(B, self).__init__(a)
        print 'init B...'
        self.b = b

class C(A):
    def __init__(self, a,b,c):
        super(C, self).__init__(a)
        print 'init C...'
        self.c = c

class D(B, C):
    def __init__(self, a,b,c,d):
        super(D, self).__init__(a,b,c)
        print 'init D...'
        self.d = d

这样不行,应该怎么做?

正在回答

5 回答

class A(object):
    def __init__(self,a):
        print 'init A...'
        self.a = a
 
class B(A):
    def __init__(self,a,b):
        super(B, self).__init__(a)
        print 'init B...'
        self.b = b
 
class C(A):
    def __init__(self, a,c):
        super(C, self).__init__(a)
        print 'init C...'
        self.c = c
 
class D(B, C):
    def __init__(self,a,d):
        (D, self).__init__
        print 'init D...'
        self.d = d


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

qq_苏格拉没有底_14

你这是什么鬼
2017-08-19 回复 有任何疑惑可以回复我~

 super(D, self).__init__(a,b,c) 这个语句,不适应多重继承。 这个没法不知道自己要继承B或C,会报错。

建议用C.__init__(self,a,b,c)这个代表 只继承C的abc属性,此时不用再写个继承B.__init__(self,a,b)这样 你同时继承 两个类的a 和 b ,D 没法判断使用哪个 会出错。

楼主的代码还有些小错误,可以自己排查下

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

不用super直接全部改成B.__init__(self, a, b)这种方式测试可以通过

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

qq_苏格拉没有底_14

也不行的
2017-08-19 回复 有任何疑惑可以回复我~

这是一个好问题 ,没有那么简单,再看看

0 回复 有任何疑惑可以回复我~
class A(object):
    def __init__(self, a):
        print 'init A...'
        self.a = a
 
class B(A):
    def __init__(self, a , b):
        super(B, self).__init__(a)
        print 'init B...'
        self.b = b
 
class C(A):
    def __init__(self, a,b,c):   <----- 这个地方应该是 a,c
        super(C, self).__init__(a)
        print 'init C...'
        self.c = c
 
class D(B, C):
    def __init__(self, a,b,c,d):
        super(D, self).__init__(a,b,c)  <----这里就是对的
        print 'init D...'
        self.d = d

A,B,C中都定义了新的属性。在D中如何使用super传参初始化?

我理解A是父类,B和C 都是A的子类,而D是B,C的子类。super传递参数的,需要把A,B,C的都传递进来就可以,当然A是父类的父类,所以写一次就好。具体可以编写一个测试一下。

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

Maxmengt

不知道您有没有试过?因为我的是不行的...
2016-02-13 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

如果D继承自B,C,而B,C继承自A。A,B,C中都定义了新的属性。在D中如何使用super传参初始化?

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