鱼C论坛

 找回密码
 立即注册
查看: 3065|回复: 12

[已解决]Python类多重继承报错

[复制链接]
发表于 2023-5-7 13:12:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. class Parent:
  2.     def __init__(self):
  3.         print('hello,')

  4. class Child1(Parent):
  5.     def __init__(self):
  6.         super().__init__()
  7.         print('1-world.')

  8. class Child2(Child1):
  9.     def __init__(self):
  10.         super().__init__()
  11.         print('2-world.')

  12. class Child3(Child2):
  13.     def __init__(self):
  14.         super().__init__()
  15.         print('3-world.')

  16. class Child4(Parent,Child1,Child2,Child3):
  17.     def __init__(self):
  18.         super().__init__()
  19.         print('4-world.')

  20. a = Child4()
复制代码


    class Child4(Parent,Child1,Child2,Child3):
TypeError: Cannot create a consistent method resolution
order (MRO) for bases Parent, Child1, Child2, Child3
请问为什么会报错,问了new Bing说这个代码没问题。但是运行的时候报错了
最佳答案
2023-5-7 13:13:44
这个代码出错的原因是因为Child4类同时继承了Parent, Child1, Child2, Child3四个类,而这四个类之间的继承关系构成了一个继承关系图谱,称为方法解析顺序(Method Resolution Order, MRO)。在Python中,MRO是用于确定继承关系图谱中方法调用顺序的算法。然而,在这个例子中,由于多重继承关系图谱中存在环,即Child1、Child2、Child3都继承自Parent类,Child4又同时继承了这四个类,导致了MRO无法解决继承关系图谱中方法的调用顺序,从而出现了错误。

为了解决这个问题,您可以重新设计类的继承关系,避免多重继承中出现环的情况,或者使用super函数来确保正确的方法调用顺序。例如,您可以尝试将Child1、Child2、Child3类的继承关系更改为单一继承,或者通过更改继承的顺序来解决问题。
修改后的代码:
  1. class Parent:
  2.     def __init__(self):
  3.         print('hello,')

  4. class Child1(Parent):
  5.     def __init__(self):
  6.         super().__init__()
  7.         print('1-world.')

  8. class Child2(Parent):
  9.     def __init__(self):
  10.         super().__init__()
  11.         print('2-world.')

  12. class Child3(Child1, Child2):
  13.     def __init__(self):
  14.         super().__init__()
  15.         print('3-world.')

  16. class Child4(Child3):
  17.     def __init__(self):
  18.         super().__init__()
  19.         print('4-world.')

  20. a = Child4()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-7 13:13:44 | 显示全部楼层    本楼为最佳答案   
这个代码出错的原因是因为Child4类同时继承了Parent, Child1, Child2, Child3四个类,而这四个类之间的继承关系构成了一个继承关系图谱,称为方法解析顺序(Method Resolution Order, MRO)。在Python中,MRO是用于确定继承关系图谱中方法调用顺序的算法。然而,在这个例子中,由于多重继承关系图谱中存在环,即Child1、Child2、Child3都继承自Parent类,Child4又同时继承了这四个类,导致了MRO无法解决继承关系图谱中方法的调用顺序,从而出现了错误。

为了解决这个问题,您可以重新设计类的继承关系,避免多重继承中出现环的情况,或者使用super函数来确保正确的方法调用顺序。例如,您可以尝试将Child1、Child2、Child3类的继承关系更改为单一继承,或者通过更改继承的顺序来解决问题。
修改后的代码:
  1. class Parent:
  2.     def __init__(self):
  3.         print('hello,')

  4. class Child1(Parent):
  5.     def __init__(self):
  6.         super().__init__()
  7.         print('1-world.')

  8. class Child2(Parent):
  9.     def __init__(self):
  10.         super().__init__()
  11.         print('2-world.')

  12. class Child3(Child1, Child2):
  13.     def __init__(self):
  14.         super().__init__()
  15.         print('3-world.')

  16. class Child4(Child3):
  17.     def __init__(self):
  18.         super().__init__()
  19.         print('4-world.')

  20. a = Child4()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-7 13:22:34 | 显示全部楼层
????

不行啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-7 13:30:28 | 显示全部楼层
sfqxx 发表于 2023-5-7 13:22
????

不行啊

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-7 13:30:54 | 显示全部楼层
sfqxx 发表于 2023-5-7 13:22
????

不行啊


你用的哪个站,我是先用ai.wuguokai.cn,不行的话chat.jinshutuan.com
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-7 13:31:51 | 显示全部楼层
歌者文明清理员 发表于 2023-5-7 13:30
你用的哪个站,我是先用ai.wuguokai.cn,不行的话chat.jinshutuan.com

chat.jinshutuan.com
没有用了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-7 13:33:10 | 显示全部楼层
sfqxx 发表于 2023-5-7 13:31
chat.jinshutuan.com
没有用了

2023-05-07 13 32 49.png ,不是可以吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-7 13:33:29 | 显示全部楼层


ahh,我不行qwq
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-7 13:34:05 | 显示全部楼层

截图
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-7 13:34:31 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-7 13:36:36 | 显示全部楼层
sfqxx 发表于 2023-5-7 13:34
emmmm,又可以了

我刚才又去了一个新的求助帖,差点把这个也复制上去
2023-05-07 13 35 43.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-7 13:37:26 | 显示全部楼层
歌者文明清理员 发表于 2023-5-7 13:36
我刚才又去了一个新的求助帖,差点把这个也复制上去

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-7 13:38:58 | 显示全部楼层

所以,可以用 chat generative pre-trained transformer 回答问题,但是至少得瞟一眼他在胡说八道啥
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-29 02:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表