鱼C论坛

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

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

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

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

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

x
class Parent:
    def __init__(self):
        print('hello,')

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

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

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

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

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类的继承关系更改为单一继承,或者通过更改继承的顺序来解决问题。
修改后的代码:
class Parent:
    def __init__(self):
        print('hello,')

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

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

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

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

a = Child4()
想知道小甲鱼最近在做啥?请访问 -> 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类的继承关系更改为单一继承,或者通过更改继承的顺序来解决问题。
修改后的代码:
class Parent:
    def __init__(self):
        print('hello,')

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

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

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

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

a = Child4()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不行啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不行啊

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不行啊


你用的哪个站,我是先用ai.wuguokai.cn,不行的话chat.jinshutuan.com
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

chat.jinshutuan.com
没有用了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

2023-05-07 13 32 49.png ,不是可以吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


ahh,我不行qwq
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

截图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-7 13:34:31 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我刚才又去了一个新的求助帖,差点把这个也复制上去
2023-05-07 13 35 43.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

所以,可以用 chat generative pre-trained transformer 回答问题,但是至少得瞟一眼他在胡说八道啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-28 03:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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