¿Cómo agrego dinámicamente mixins como clases base sin obtener errores de MRO?

Di que tengo una claseA, B yC.

ClaseA yB son ambas clases mixtas para la claseC.

<code>class A( object ):
    pass
class B( object ):
    pass
class C( object, A, B ):
    pass
</code>

Esto no funcionará cuando se cree una instancia de la clase C. Tendría que eliminarobject de la clase C para que funcione. (De lo contrario tendrás problemas de MRO).

TypeError: error al llamar a las bases de metaclase
No se puede crear una resolución de método consistente
orden (MRO) para las bases B, objeto, A

Sin embargo, mi caso es un poco más complicado. En mi clase de casoC es unservidor dóndeA yB Serán los complementos que se cargan en el inicio. Estos están residiendo en su propia carpeta.

También tengo una clase llamadaCfactory. En Cfactory tengo un__new__ Método que creará un objeto totalmente funcional C. En el__new__ método yobuscar para plugins, cargarlos usando__import__, y luego asignarlos aC.__bases__ += (loadedClassTypeGoesHere, )

Así que lo siguiente es una posibilidad: (lo hizo bastante abstracto)

<code>class A( object ):
    def __init__( self ): pass
    def printA( self ):   print "A"
class B( object ):
    def __init__( self ): pass
    def printB( self ):   print "B"
class C( object ):
    def __init__( self ):  pass
class Cfactory( object ):
    def __new__( cls ):
        C.__bases__ += ( A, )
        C.__bases__ += ( B, )
        return C()
</code>

Esto de nuevo no funcionará, y dará de nuevo los errores de MRO:

TypeError: no se puede crear una resolución de método consistente
orden (MRO) para bases objeto, A

Una solución fácil para esto es eliminar elobject clase de base deA yB. Sin embargo, esto los convertirá en objetos antiguos que deben evitarse cuando estos complementos se ejecutan de forma independiente (lo que debería ser posible, según UnitTest).

Otra solución fácil es eliminarobject desdeC pero esto también lo hará una clase de estilo antiguo yC.__bases__ no estará disponible, por lo tanto no puedo agregar objetos adicionales a la base deC

¿Cuál sería una buena solución arquitectónica para esto y cómo harías algo como esto? Por ahora puedo vivir con clases antiguas para los propios plugins. Pero prefiero no usarlos.

Respuestas a la pregunta(3)

Su respuesta a la pregunta