gpt4 book ai didi

python - 为什么这是一个模棱两可的 MRO?

转载 作者:太空狗 更新时间:2023-10-29 21:27:56 26 4
gpt4 key购买 nike

class First(object):
def __init__(self):
print("first")

class Second(First):
def __init__(self):
print("second")

class Third(First, Second):
def __init__(self):
print("third")

Source

为什么 Python 不能创建一致的 MRO?在我看来这很清楚:

  1. 如果第三个方法不存在,则在第一个中搜索
  2. 如果第一个方法不存在,则在第二个中搜索

但是如果你尝试一下:

TypeError: Error when calling the metaclass bases
Cannot create a consistent method resolution
order (MRO) for bases First, Second

最佳答案

为了“一致”,MRO 应该满足这些约束:

  1. 如果一个类继承自多个父类(super class),则它在父类(super class)列表中较早列出的父类(super class)在 MRO 中的出现时间应早于它较晚列出的父类(super class)。
  2. MRO 中的每个类都应位于其任何父类(super class)之前。

您建议的层次结构没有任何可能的顺序满足这些限制。因为 Third 被定义为从 First before Second 继承,所以在 MRO 中 First 应该在 Second 之前。但是因为 Second 继承自 First,所以在 MRO 中 Second 应该在 First 之前。这种矛盾是无法调和的。

您可以阅读有关 Python 用于计算 MRO 的精确方法的更多信息,该方法称为 C3 linearization algorithm .

关于python - 为什么这是一个模棱两可的 MRO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47808926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com