24小时热门版块排行榜    

查看: 750  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 321求调剂 +4 wasdssaa 2026-03-26 4/200 2026-03-26 16:25 by 不吃魚的貓
[考研] 297求调剂 +6 田洪有 2026-03-26 6/300 2026-03-26 15:55 by 不吃魚的貓
[考研] 274求调剂 +13 顾九笙要谦虚 2026-03-24 19/950 2026-03-26 13:30 by 小小麦片
[考研] 一志愿上海交大生物与医药专硕324分,求调剂 +6 jiajunX 2026-03-22 6/300 2026-03-25 23:05 by licg0208
[考研] 材料与化工328分调剂 +6 。,。,。,。i 2026-03-23 6/300 2026-03-25 22:30 by 418490947
[考研] 290分调剂求助 +3 吉祥止止陈 2026-03-25 3/150 2026-03-25 19:58 by barlinike
[考研] 0854AI CV方向招收调剂 +4 章小鱼567 2026-03-23 4/200 2026-03-25 17:04 by CoderLoser
[考研] 359求调剂 +3 王了个楠 2026-03-25 3/150 2026-03-25 12:50 by Dyhoer
[考研] 0854电子信息求调剂 324 +4 Promise-jyl 2026-03-23 4/200 2026-03-25 11:36 by Sugarlight
[考研] 07化学280分求调剂 +7 722865 2026-03-23 7/350 2026-03-25 09:29 by aa331100
[考研] 311求调剂 +3 冬十三 2026-03-24 3/150 2026-03-24 21:31 by peike
[考研] 307求调剂 +5 超级伊昂大王 2026-03-24 5/250 2026-03-24 15:46 by 星空星月
[考研] 277分求调剂,跨调材料 +3 考研调剂lxh 2026-03-24 3/150 2026-03-24 13:52 by JourneyLucky
[考研] 279分求调剂 一志愿211 +18 chaojifeixia 2026-03-19 20/1000 2026-03-24 10:34 by dolphin_ycj
[考研] 一志愿华东理工大学081700,初试分数271 +5 kotoko_ik 2026-03-23 6/300 2026-03-24 10:29 by 学术搬砖er
[考研] 材料/农业专业,07/08开头均可,过线就行 +3 呵唔哦豁 2026-03-23 4/200 2026-03-23 22:30 by 汪!?!
[考研] 求老师收我 +3 zzh16938784 2026-03-23 3/150 2026-03-23 12:56 by ztnimte
[考研] 298求调剂 +8 上岸6666@ 2026-03-20 8/400 2026-03-23 11:02 by laoshidan
[考研] 求调剂 +3 13341 2026-03-20 3/150 2026-03-21 18:28 by 学员8dgXkO
[考研] 一志愿深大,0703化学,总分302,求调剂 +4 七月-七七 2026-03-21 4/200 2026-03-21 18:20 by 学员8dgXkO
信息提示
请填处理意见