Funciones de Mixin en Python

Funciones de Mixin en Python

 

Una vez que Python admite la herencia múltiple , ¿puede admitir la herencia dinámica? En el proceso de operación del programa, redefina la herencia de clases. Python admite esta herencia dinámica. Este es el mixin en Python. En el proceso de definir la clase, el orden de herencia de la clase se cambia y la clase se hereda. Cuando un módulo no se puede modificar, el método de la clase se puede agregar dinámicamente a través del método mixin, y el sistema de herencia original de la clase se puede cambiar dinámicamente. Comprenda la herencia múltiple, las funciones de combinación son mucho más simples. Pero debe prestar atención a los cambios en el sistema de herencia específico después de la mezcla.

Copiar codigo

#! / usr / bin / env python

tipos de importación

def MixIn (pyClass, mixInClass, makeAncestor = 0):

    si makeAncestor:
        pyClass .__ bases__ = (mixInClass,) + pyClass .__ bases__
    elif mixInClass no en pyClass .__ bases__:
        pyClass .__ bases__ = pyClass .__ bases__ + (mixInClass,)
    demás:
        pasar

clase C1 (objeto):
    def prueba (auto):
        imprimir 'prueba en C1'

clase C0MixIn (objeto):
    def prueba (auto):
        imprimir 'prueba en C0MixIn'

clase C2 (C1, C0MixIn):
    def prueba (auto):
        imprimir 'prueba en C2'

clase C0 (C1):
    pasar

if __name__ == "__main__":

    imprimir C0 .__ mro__
    c1 = C0 ()
    c1.test ()
    MixIn (C0, C0MixIn, 1)
    c0 = C0 ()
    c0.test ()
    imprimir C0 .__ mro__

    imprimir C2 .__ mro__
    MixIn (C2, C0MixIn)
    imprimir C2 .__ mro__

Copiar codigo

 

Los resultados de la operación son los siguientes: python mixin2.py

Haga clic (aquí) para contraer o abrir

Copiar codigo

(<clase '__main __. C0'>, <clase '__main __. C1'>, <tipo 'objeto'>)
prueba en C1
prueba en C0MixIn
(<clase '__main __. C0'>, <clase '__main __. C0MixIn'>, <clase '__main __. C1'>, <tipo 'objeto'>)
(<clase '__main __. C2'>, <clase '__main __. C1'>, <clase '__main __. C0MixIn'>, <tipo 'objeto'>)
(<clase '__main __. C2'>, <clase '__main __. C1'>, <clase '__main __. C0MixIn'>, <tipo 'objeto'>)

Copiar codigo

 

Etiquetas:  python

Supongo que te gusta

Origin blog.csdn.net/qq_42533216/article/details/112979916
Recomendado
Clasificación