24小时热门版块排行榜    

查看: 746  |  回复: 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的回帖

ygidtu

新虫 (正式写手)

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

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

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的回帖

baichi121234

禁虫 (职业作家)

本帖内容被屏蔽

4楼2016-12-14 09:36:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 求材料,环境专业调剂 +3 18567500178 2026-03-18 3/150 2026-03-23 23:50 by 热情沙漠
[考研] 303求调剂 +4 元夕元 2026-03-20 4/200 2026-03-23 19:00 by macy2011
[考研] 一志愿上海交大生物与医药专硕324分,求调剂 +5 jiajunX 2026-03-22 5/250 2026-03-23 18:07 by YMU施老师
[考研] 0854电子信息求调剂 324 +3 Promise-jyl 2026-03-23 3/150 2026-03-23 13:43 by wangkm
[考研] 315分,诚求调剂,材料与化工085600 +3 13756423260 2026-03-22 3/150 2026-03-22 20:11 by edmund7
[考研] 求调剂一志愿海大,0703化学学硕304分,有大创项目,四级已过 +6 幸运哩哩 2026-03-22 10/500 2026-03-22 20:10 by edmund7
[考研] 一志愿华中农业071010,总分320求调剂 +5 困困困困坤坤 2026-03-20 6/300 2026-03-22 17:41 by hxsm
[考研] 考研调剂 +4 来好运来来来 2026-03-21 4/200 2026-03-22 12:15 by 星空星月
[考研] 一志愿华中科技大学071000,求调剂 +4 沿岸有贝壳6 2026-03-21 4/200 2026-03-22 07:21 by ilovexiaobin
[考研] 一志愿东华大学控制学硕320求调剂 +3 Grand777 2026-03-21 3/150 2026-03-21 19:23 by 简之-
[考研] 0805 316求调剂 +3 大雪深藏 2026-03-18 3/150 2026-03-21 18:55 by 学员8dgXkO
[考研] 307求调剂 +3 余意卿 2026-03-18 3/150 2026-03-21 17:31 by ColorlessPI
[考研] 324分 085600材料化工求调剂 +4 llllkkkhh 2026-03-18 4/200 2026-03-21 01:24 by JourneyLucky
[考研] 一志愿重庆大学085700资源与环境专硕,总分308求调剂 +3 墨墨漠 2026-03-18 3/150 2026-03-21 00:39 by JourneyLucky
[考研] 294求调剂材料与化工专硕 +15 陌の森林 2026-03-18 15/750 2026-03-20 23:28 by JourneyLucky
[考研] 308求调剂 +3 阿姐阿姐家啊 2026-03-18 3/150 2026-03-20 23:24 by JourneyLucky
[考研] 求调剂,一志愿:南京航空航天大学大学 ,080500材料科学与工程学硕,总分289分 +4 @taotao 2026-03-19 4/200 2026-03-20 22:14 by JourneyLucky
[考研] 一志愿西安交通大学 学硕 354求调剂211或者双一流 +3 我想要读研究生 2026-03-20 3/150 2026-03-20 20:13 by JourneyLucky
[考研] 0856调剂,是学校就去 +8 sllhht 2026-03-19 9/450 2026-03-20 14:25 by 无懈可击111
[考博] 26博士申请 +3 1042136743 2026-03-17 3/150 2026-03-17 23:30 by 轻松不少随
信息提示
请填处理意见