Python中具有相同基类的多重继承

时间:2011-11-11 17:43:41

标签: python multiple-inheritance

我试图在python中绕过多重继承。

假设我有以下基类:

class Structure(object):
    def build(self, *args):
        print "I am building a structure!"
        self.components = args

让我们说我有两个继承它的课程:

class House(Structure):
    def build(self, *args):
        print "I am building a house!"
        super(House, self).build(*args)

class School(Structure):
    def build(self, type="Elementary", *args):
        print "I am building a school!"
        super(School, self).build(*args)

最后,创建一个使用多重继承的类:

class SchoolHouse(School, House):
    def build(self, *args):
        print "I am building a schoolhouse!"
        super(School, self).build(*args)

然后,我创建一个SchoolHouse对象并在其上运行build

>>> sh = SchoolHouse()
>>> sh.build("roof", "walls")
I am building a schoolhouse!
I am building a house!
I am building a structure!

所以我想知道 - School课程发生了什么?有没有办法让Python以某种方式运行?

我特别想知道因为有相当数量的Django包为模型提供自定义Managers。但是,似乎没有一种方法可以将它们组合起来,而无需将其中一个或另一个管理器继承为另一个。只是导入两者并以某种方式使用它们都很好,但看起来它无法完成?

另外我想它只是帮助指向Python中多重继承的一个很好的入门。我之前和Mixins做过一些工作,真的很喜欢使用它们。我想我只是想知道当它们从同一个基类继承时,是否有任何优雅的方法来组合来自两个不同类的功能。

是的,傻,我。这是一个错字。我感到非常愚蠢。我保证,当我超越现实生活的时候,我总是把正确的课程放进去,只有当我在剪切和粘贴时尝试这一点时,我才搞砸了。

1 个答案:

答案 0 :(得分:15)

super()中的SchoolHouse来电是错误的。

是:

super(School, self).build(*args)

应该是:

super(SchoolHouse, self).build(*args)