Der*_*會功夫 11 python multiple-inheritance
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"
Run Code Online (Sandbox Code Playgroud)
为什么Python不能创建一致的MRO?在我看来它非常清楚:
但如果你尝试一下:
TypeError: Error when calling the metaclass bases
Cannot create a consistent method resolution
order (MRO) for bases First, Second
Run Code Online (Sandbox Code Playgroud)
Bre*_*arn 16
为了"一致",MRO应该满足这些限制:
您提议的层次结构没有任何可能的顺序满足这些约束.因为第三个被定义为从第二个之前的第一个继承,所以第一个应该在MRO之前来到第二个.但是因为Second继承自First,Second应该来自MRO的First.这种矛盾无法调和.
您可以阅读有关Python用于计算MRO的精确方法的更多信息,称为C3线性化算法.
小智 5
Python内部认为子类之前不存在超类。
根据你的代码。扫描或加载类后,Python 认为方法解析必须是:
Third -> Second -> First
Run Code Online (Sandbox Code Playgroud)
这里,First是Second的超类。
但是在执行时,在检查Third后,它会遇到First ,它是Second的超类。
因此出现了类型错误。
class Third(First, Second): # Wrong
class Third(Second, First): # Correct
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1241 次 |
| 最近记录: |