|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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说这个代码没问题。但是运行的时候报错了
这个代码出错的原因是因为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()
复制代码
|
|