据我所知,以及我在网上找到的所有东西,这应该行得通(但事实并非如此,这就是我为什么要问这个问题;)
class Tigon(Crossbreeds, Predator, Lion):
def __init__(self):
super().__init__()
def printSize(self):
print("Huge")
“杂交种”和“捕食者”都是从“哺乳动物”继承的,“狮子”是从“捕食者”继承的。那些作品的汇编很好。我正在开发Python 3.2,不过我也尝试了前面的:
编辑:抱歉,我的一部分帖子因为某种原因没有通过。在
我也试过:
^{pr2}$他们俩都给了我:
class Tigon(Crossbreeds, Predator, Lion):
TypeError: Cannot create a consistent method resolution
order (MRO) for bases Predator, Mammal, Lion
有什么建议吗?在
应该是super().__init__(self)
。编辑时间: 抱歉,你应该把
Lion
放在前面:如果我正确理解了您描述的继承模型,那么您应该如何定义
Tigon
类:由于狮子是一种掠食者,所以这个选择是等价的:
^{pr2}$现在有一个快速的规则。每个类的构造函数在基类之后调用,但它们必须在类定义中以反向顺序出现。另外,重写父类中定义的方法的类必须首先出现在类定义中——这意味着如果要重写Lion中的Predator方法,Lion应该在定义中出现在Predator之前。对此的更详细的解释在Jan Hudec's answer中。在
简而言之:不要直接或间接地继承同一个基类,但是在之后直接继承应该可以。所以不要继承
Predator
,也不要在Lion
之后继承它。在嗯,C3 MRO似乎找不到与所有约束一致的顺序。限制条件是:
您按该顺序继承},因此它们的方法必须按该顺序调用。必须在
Crossbreeds
、Predator
和{相关问题 更多 >
编程相关推荐