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

Итак, у меня такая ситуация.

class A(object): def foo(self, call_from): print "foo from A, call from %s" % call_from class B(object): def foo(self, call_from): print "foo from B, call from %s" % call_from class C(object): def foo(self, call_from): print "foo from C, call from %s" % call_from class D(A, B, C): def foo(self): print "foo from D" super(D, self).foo("D") d = D() d.foo() 

Результатом кода является

 foo from D foo from A, call from D 

Я хочу вызвать весь родительский метод, в данном случае, метод foo, из класса D не используя super в родительском классе, таком как A Я просто хочу назвать супер из класса D Класс A , B и C подобен классу mixin, и я хочу вызвать все методы foo из D Как я могу достичь этого?

  • читать маркеры .wav-файла
  • Найти «домашний каталог» в Python?
  • удалить первый элемент в подсмотре матрицы
  • Найти точки в ячейках через pandas dataframes координат
  • Как визуализировать нелинейную связь на участке рассеяния
  • Разрешение отклонено при попытке установить pip в Mac OS X Lion
  • Чтение файлов в определенном порядке в python
  • Как получить доступ к данным netstat в Python?
  • 2 Solutions collect form web for “Родительский метод вызова Python Множественное наследование”

    Вы можете использовать __bases__ как это

     class D(A, B, C): def foo(self): print "foo from D" for cls in D.__bases__: cls().foo("D") 

    С этим изменением выход будет

     foo from D foo from A, call from D foo from B, call from D foo from C, call from D 

    Добавьте вызов super() в другие классы, кроме C Поскольку DRO MRO

     >>> D.__mro__ (<class '__main__.D'>, <class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>, <type 'object'>) 

    Вам не нужен супер-вызов в C

    Код:

     class A(object): def foo(self, call_from): print "foo from A, call from %s" % call_from super(A,self).foo('A') class B(object): def foo(self, call_from): print "foo from B, call from %s" % call_from super(B, self).foo('B') class C(object): def foo(self, call_from): print "foo from C, call from %s" % call_from class D(A, B, C): def foo(self): print "foo from D" super(D, self).foo("D") d = D() d.foo() 

    Вывод:

     foo from D foo from A, call from D foo from B, call from A foo from C, call from B 
    Interesting Posts
    Python - лучший язык программирования в мире.