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

Jor*_*ter 5 python multiple-inheritance

我试图在python中围绕多重继承.

假设我有以下基类:

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

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

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)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

我特别想知道因为有相当数量的Django包提供Managers模型定制.但是,如果没有将一个或另一个管理器写为继承另一个管理器,似乎没有办法将它们组合在一起.只是导入两者并以某种方式使用它们会很好,但看起来它无法完成?

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

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

Sve*_*ach 15

你的super()来电SchoolHouse是错的.

它是:

super(School, self).build(*args)
Run Code Online (Sandbox Code Playgroud)

它应该是:

super(SchoolHouse, self).build(*args)
Run Code Online (Sandbox Code Playgroud)