La herencia triple causa conflicto de metaclases ... A veces

arece que me topé con un infierno de metaclases incluso cuando no quería tener nada que ver con eso.

Estoy escribiendo una aplicación en Qt4 usando PySide. Quiero separar la parte controlada por eventos de la definición de UI, que se genera a partir de archivos de Qt Designer. Por lo tanto, creo un "controlador" de clases, pero para facilitar mi vida los heredé de todos modos. Un ejemplo

class BaseController(QObject):
    def setupEvents(self, parent):
        self.window = parent

class MainController(BaseController):
    pass

class MainWindow(QMainWindow, Ui_MainWindow, MainController):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.setupUi(self)
  ,      self.setupEvents(self)

Esto funciona como se esperaba. También tiene herencia de QDialog, Ui_Dialog, BaseController). Pero cuando subclaseBaseController e intente heredar de dicha subclase (en lugar deBaseController), Recibo un error:

TypeError: Error al llamar a las bases de metaclases conflicto de metaclases: la metaclase de una clase derivada debe ser una subclase (no estricta) de las metaclases de todas sus bases

Clarificación: AmbosQMainWindow yQDialog heredar deQObject. BaseController también debe heredar de él debido a las peculiaridades del sistema de eventos Qt. Las clases Ui_ solo heredan de la clase de objeto Python simple. Busqué soluciones, pero todas ellas involucran casos de uso intencional de metaclases. Entonces debo estar haciendo algo terriblemente mal.

EDIT: mi descripción puede ser más clara al agregar gráficos.

Ejemplo de trabajo:

QObject
|      \___________________
|            object        |
QMainWindow     |          BaseController
|      /---Ui_MainWindow   |
|      |                   MainController
MainWindow-----------------/

Otro ejemplo de trabajo:

QObject
|      \___________________
|            object        |
QDialog         |          BaseController
|      /---Ui_OtherWindow  |
|      |                   |
OtherWindow----------------/

No ejemplo de trabajo:

QObject
|      \___________________
|            object        |
QDialog         |          BaseController
|      /---Ui_OtherWindow  |
|      |                   OtherController
OtherWindow----------------/

Respuestas a la pregunta(2)

Su respuesta a la pregunta