| 查看: 681 | 回复: 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()函数,导致有一个被覆盖了,是不是这样? |
» 猜你喜欢
投稿Elsevier的Neoplasia杂志,到最后选publishing options时页面空白,不能完成投稿
已经有22人回复
申请26博士
已经有5人回复
职称评审没过,求安慰
已经有22人回复
垃圾破二本职称评审标准
已经有15人回复
EST投稿状态问题
已经有7人回复
毕业后当辅导员了,天天各种学生超烦
已经有4人回复
聘U V热熔胶研究人员
已经有10人回复
求助文献
已经有3人回复
投稿返修后收到这样的回复,还有希望吗
已经有8人回复
三无产品还有机会吗
已经有6人回复
tuburfransth
金虫 (正式写手)
- 应助: 9 (幼儿园)
- 金币: 2380.1
- 散金: 68
- 红花: 5
- 帖子: 384
- 在线: 124.8小时
- 虫号: 3425987
- 注册: 2014-09-18
- 性别: GG
- 专业: 模式识别
|
自己尝试修改了几处,运行结果和预想的一样,修改后的代码如下: 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
ygidtu
新虫 (正式写手)
- 应助: 4 (幼儿园)
- 金币: 1690.7
- 散金: 798
- 红花: 3
- 帖子: 419
- 在线: 117.7小时
- 虫号: 2854989
- 注册: 2013-12-07
- 性别: GG
- 专业: 生物信息学
|
两次A的初始化很正常吧,你B是继承A的,C也是继承A的,然后D里同时有BC,不就是包含了两个A?所以A有的那个函数肯定被BC玩坏了,多重继承我从来没考虑过同时继承同一个父类衍生出来的两个子类,所以还真不知道怎么解决 发自小木虫Android客户端 |
3楼2016-12-14 09:31:20
baichi121234
禁虫 (职业作家)
|
本帖内容被屏蔽 |
4楼2016-12-14 09:36:14













回复此楼