Есть ли способ использовать super () для вызова метода __init__ каждого базового класса в Python?

Предположим, у меня есть код Python:

class Mother: def __init__(self): print("Mother") class Father: def __init__(self): print("Father") class Daughter(Mother, Father): def __init__(self): print("Daughter") super().__init__() d = Daughter() 

Этот сценарий печатает «Дочь». Есть ли способ гарантировать, что все методы __init__ классов классов называются? Один из методов, который я придумал, заключался в следующем:

 class Daughter(Mother, Father): def __init__(self): print("Daughter") for base in type(self).__bases__: base.__init__(self) 

Этот сценарий печатает «Дочь», «Мать», «Отец». Есть ли хороший способ сделать это, используя super () или другой метод?

One Solution collect form web for “Есть ли способ использовать super () для вызова метода __init__ каждого базового класса в Python?”

Раймонд Хеттингер объяснил это очень хорошо в своем выступлении Super Super Supered от PyCon 2015. Короткий ответ: да, если вы это разработаете, и вызовите super().__init__() в каждом классе

 class Mother: def __init__(self): super().__init__() print("Mother") class Father: def __init__(self): super().__init__() print("Father") class Daughter(Mother, Father): def __init__(self): super().__init__() print("Daughter") 

Имя super неудачно, оно действительно пробивается через базовые классы.

  • Проектирование хранилища для очень большого игрового мира
  • Распространение python на Mac, Linux и Windows с помощью cx_freeze: могу ли я создать все приложения с одной платформы?
  • Почему создание набора из фильтра происходит намного быстрее, чем создание списка или кортежа?
  • Как избежать создания библиотеки C с моим пакетом python?
  • Связывание операторов с использованием ключевого слова 'и'
  • Программа Python не работает в Windows, но не в Linux
  • Запись с помощью встроенного модуля .csv Python
  • Почему virtualenv эффективно отключает заполнение вкладки Python 3?
  • Python - лучший язык программирования в мире.