Python super() - 应该工作但不是吗?

BIU*_*BIU 6 python multiple-inheritance

据我所知,以及我在网上找到的一切,这应该有效(但事实并非如此,这就是为什么我在这里问;))

class Tigon(Crossbreeds, Predator, Lion):

    def __init__(self):
        super().__init__()
    def printSize(self):
        print("Huge")
Run Code Online (Sandbox Code Playgroud)

"Crossbreeds"和"Predator"都继承自"Mammal","Lion"继承自Predator.编译的工作正常.我正在研究Python 3.2,虽然我也尝试过前面的:

编辑:对不起,部分帖子由于某种原因没有通过.

我也尝试过:

class Tigon(Crossbreeds, Predator, Lion):

    def __init__(self):
        super(Tigon, self).__init__()
    def printSize(self):
        print("Huge")
Run Code Online (Sandbox Code Playgroud)

他们俩都给了我:

class Tigon(Crossbreeds, Predator, Lion):
TypeError: Cannot create a consistent method resolution
order (MRO) for bases Predator, Mammal, Lion
Run Code Online (Sandbox Code Playgroud)

有什么建议?

Jan*_*dec 7

简短回答:不要直接或间接地继承相同的基类,但间接继承应该可以正常工作.因此,不继承Predator或继承它之后 Lion.

好吧,C3 MRO似乎无法找到任何符合所有约束的订单.限制是:

  • 每个类必须在它的基类之前
  • 并且基类必须按它们列出的顺序排列.

你继承Crossbreeds,PredatorLion按照这个顺序,所以他们的方法必须按照这个顺序被调用.但是自从Lion继承之后Predator,它的方法必须先被调用Predator.这是不可能的,因此它表示无法创建一致的方法解析顺序.


Kab*_*bie 0

应该super().__init__(self)

编辑:我很抱歉,你应该把Lion

class Tigon(Lion, Predator, Crossbreeds):
    def __init__(self):
        super().__init__()
Run Code Online (Sandbox Code Playgroud)