24小时热门版块排行榜    

查看: 721  |  回复: 3

tuburfransth

金虫 (正式写手)

[求助] Python多重继承怎么初始化?

代码如下:
class A(object):
        def __init__(self, a):
                print('__init__ A', str(a))
                self.A = a
               
class B(A):
        def __init__(self, a, b):
                super(B, self).__init__(a)
                print('__init__ B', str(b))
                self.B = b

class C(A):
        def __init__(self, a, c):
                super(C, self).__init__(a)
                print('__init__ C', str(c))
                self.C = c
               
class D(B, C):
        def __init__(self, a, b, c, d):
                B.__init__(self, a, b)                    # 这行及下行代码有问题,貌似对基类A进行了两次初始化
                C.__init__(self, a, c)
                print('__init__ D', str(d))
                self.D = d
               
shanghe = D('x', 'y', 'z', 'k')
-------------------------------------------------------------------------------------------------------------------
Traceback (most recent call last):
  File "test.py", line 25, in <module>
    shanghe = D('x', 'y', 'z', 'k')
  File "test.py", line 20, in __init__
    B.__init__(self, a, b)
  File "test.py", line 8, in __init__
    super(B, self).__init__(a)
TypeError: __init__() missing 1 required positional argument: 'c'
-----------------------------------------------------------------------------------------------------------
说明:A是基类,B和C都继承A,而D同时继承B和C,问题出在注释那一行及下一行,这两行初始化代码应该怎么写?
还有一个问题就是:B和C都继承了A,那么假如A中有一个函数名为getname(),class D(B, C):会导致getname()函数被覆盖一次吗?也就是说由于B和C都继承了A中的getname()函数,导致有一个被覆盖了,是不是这样?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tuburfransth

金虫 (正式写手)

自己尝试修改了几处,运行结果和预想的一样,修改后的代码如下:
class A(object):
        def __init__(self, a):
                print('__init__ A', str(a))
                self.A = a
               
class B(A):
        def __init__(self, a, b):
                B.__init__(self, a)        # 修改此处,不知道为什么super(B, self).__init__(a)会有问题
                print('__init__ B', str(b))
                self.B = b

class C(A):
        def __init__(self, a, c):
                C.__init__(self, a)        # 修改此处, 不知道为什么super(C, self).__init__(a)会有问题
                print('__init__ C', str(c))
                self.C = c
               
class D(B, C):
        def __init__(self, a, b, c, d):
                B.__init__(self, a, b)                    # 这行及下行代码有问题,貌似对基类A进行了两次初始化
                C.__init__(self, a, c)
                print('__init__ D', str(d))
                self.D = d
               
shanghe = D('x', 'y', 'z', 'k')
2楼2016-12-13 18:27:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ygidtu

新虫 (正式写手)

两次A的初始化很正常吧,你B是继承A的,C也是继承A的,然后D里同时有BC,不就是包含了两个A?所以A有的那个函数肯定被BC玩坏了,多重继承我从来没考虑过同时继承同一个父类衍生出来的两个子类,所以还真不知道怎么解决

发自小木虫Android客户端
3楼2016-12-14 09:31:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

baichi121234

禁虫 (职业作家)

本帖内容被屏蔽

4楼2016-12-14 09:36:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 tuburfransth 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 情人节自我反思:在爱情中有过遗憾吗? +5 瞬息宇宙 2026-02-15 6/300 2026-02-18 12:51 by 月下雪林
[找工作] 售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急 +3 i3cz6qj6l2 2026-02-17 3/150 2026-02-18 11:09 by lqtl9djx19
[考博] 售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急 +3 i3cz6qj6l2 2026-02-17 3/150 2026-02-18 10:54 by lqtl9djx19
[考研] 售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急 +3 i3cz6qj6l2 2026-02-17 3/150 2026-02-18 10:39 by lqtl9djx19
[考研] 售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急 +3 pnpwoqbg8f 2026-02-17 3/150 2026-02-18 08:53 by lqtl9djx19
[硕博家园] 售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急 +3 pnpwoqbg8f 2026-02-17 3/150 2026-02-18 08:38 by lqtl9djx19
[找工作] 售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急 +4 pnpwoqbg8f 2026-02-17 4/200 2026-02-18 07:55 by lotyj5cz79
[基金申请] 售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急 +3 pnpwoqbg8f 2026-02-16 4/200 2026-02-18 07:40 by lotyj5cz79
[考研] 售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急 +4 pnpwoqbg8f 2026-02-16 4/200 2026-02-18 07:38 by lotyj5cz79
[硕博家园] 售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急 +4 pnpwoqbg8f 2026-02-16 4/200 2026-02-18 07:23 by lotyj5cz79
[论文投稿] 售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急 +4 pnpwoqbg8f 2026-02-16 4/200 2026-02-18 07:08 by lotyj5cz79
[公派出国] 售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急 +3 pnpwoqbg8f 2026-02-16 3/150 2026-02-18 06:53 by lotyj5cz79
[论文投稿] 售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急 +3 pnpwoqbg8f 2026-02-17 3/150 2026-02-18 00:40 by tk2gfblvuz
[找工作] 售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急 +3 pnpwoqbg8f 2026-02-17 4/200 2026-02-18 00:23 by tk2gfblvuz
[公派出国] 售SCI一区文章,我:8 O5 51O 54,科目齐全,可+急 +3 pnpwoqbg8f 2026-02-17 3/150 2026-02-17 23:40 by tk2gfblvuz
[基金申请] 基金正文30页指的是报告正文还是整个申请书 +3 successhe 2026-02-16 4/200 2026-02-17 20:56 by successhe
[基金申请] 今年春晚有几个节目很不错,点赞! +5 瞬息宇宙 2026-02-16 6/300 2026-02-17 12:49 by jymy19840415
[微米和纳米] 球磨粉体时遇到了大的问题,请指教! 10+3 6sbiam 2026-02-12 15/750 2026-02-16 15:03 by tgzxzqj
[基金申请] 过年走亲戚时感受到了所开私家车的鄙视链 +3 瞬息宇宙 2026-02-15 5/250 2026-02-16 14:23 by aspect3000
[硕博家园] 江汉大学解明教授课题组招博士研究生/博士后 +3 cleverlyy 2026-02-12 3/150 2026-02-12 21:02 by qsdf1
信息提示
请填处理意见