Множественное наследование с одинаковыми базовыми классами в Python

Я пытаюсь осмыслить множественное наследование в 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 как-то запускать оба?

I Меня это интересует именно потому, что существует довольно много пакетов Django, которые предоставляют пользовательские менеджеры для моделей. Но, похоже, нет способа объединить их, не написав того или другого из менеджеров. наследуется от другого. Было бы неплохо просто импортировать и то, и другое, но похоже, что это невозможно?

Также я думаю, было бы полезно указать на хороший учебник о множественном наследовании в Python. Я уже работал с миксинами раньше, и мне очень нравится их использовать. Думаю, мне просто интересно, есть ли какой-нибудь элегантный способ объединить функциональность двух разных классов, когда они наследуются от одного и того же базового класса.

Ага, глупый я. Все это время это была опечатка. Я чувствую себя очень тупым. Я обещаю, я всегда ставлю правильный класс, когда я супер в реальной жизни, только когда я вырезал и вставлял, чтобы попробовать это, я испортил.

5
задан Daniel Daranas 5 September 2013 в 16:34
поделиться