Я работаю над проектом с участием PyQt5, и я борюсь с управлением наследованием между виджетами.Python - как заставить это множественное наследование работать?
У меня есть один экран QWidget, который наследует QtWidgets.QWidget и другой класс, который генерируется QtDesigner. Он читает что-то вроде этого:
class a(QtWidgets.QWidget, Ui_a):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.setupUi(self)
<some attributes>
<some functions
Здесь я унаследовать от Ui_a
, отдельный класс хранится в созданном файле, и я могу назвать setupUi
(метод Ui_a
) штрафа.
Теперь я хочу создать еще один класс b
, который также является QWidget, который необходимо отобразить. Этот класс b
требует использования некоторых функций и атрибутов из класса a
. Я могу просто скопировать вставку необходимых материалов, но это плохая практика, поэтому я ищу более аккуратное решение. Если я код:
class b(QtWidgets.QWidget, Ui_b, a):
def __init__(self, parent=None):
QtWidgets.QWidget.__init(self, parent)
self.setupUi(self)
Это то происходит сбой с сообщением об ошибке, что он не может создать последовательный порядок разрешения метода.
Мой первый вопрос: я знаю, что мне нужно вызвать метод init класса a
, так как там созданы атрибуты a
, но я не знаю, как это сделать.
Мой второй вопрос: как исправить эту ошибку MRO и создать новый класс b
, который может использовать атрибуты и функции a
?
Посмотрите на http://stackoverflow.com/questions/1848474/method-resolution-order-mro-in-new-style-python-classes – dahrens
Возможный дубликат [TypeError: невозможно создать согласованный порядок разрешения метода (MRO)] (http://stackoverflow.com/questions/29214888/typeerror-cannot-create-a-consistent-m ethod-resolution-order-mro) – whereswalden