Fonctionnalités de Mixin en python

Fonctionnalités de Mixin en python

 

Une fois que Python prend en charge l' héritage multiple , peut-il prendre en charge l'héritage dynamique? Dans le processus de fonctionnement du programme, redéfinissez l'héritage de classe. Python prend en charge cet héritage dynamique. C'est le mixin en python. Lors du processus de définition de la classe, l'ordre d'héritage de la classe est modifié et la classe est héritée. Lorsqu'un module ne peut pas être modifié, la méthode de la classe peut être ajoutée dynamiquement via la méthode mixin, et le système d'héritage d'origine de la classe peut être modifié dynamiquement. Comprenez l'héritage multiple, les fonctionnalités de mixin sont beaucoup plus simples. Mais vous devez faire attention aux changements dans le système d'héritage spécifique après mixin.

Copier le code

#! / usr / bin / env 

types d'importation python 

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

    if makeAncestor: 
        pyClass .__ bases__ = (mixInClass,) + pyClass .__ bases__ 
    elif mixInClass pas dans pyClass .__ bases__: 
        pyClass .__ bases__ = pyClass .__ bases__ + (mixInClass,) 
    else: 
        passer la 

classe C1 (objet): 
    def test (self): 
        print 'test in C1' 

class C0MixIn (object): 
    def test (self): 
        print 'test in C0MixIn' 

class C2 ( C1, C0MixIn): 
    def test (self): 
        print 'test in C2' 

class C0 (C1): 
    pass 

if __name__ == "__main__":
 
    print C0.__mro__
    c1 = C0 () 
    c1.test () 
    MixIn (C0, C0MixIn, 1) 
    c0 = C0 () 
    c0.test () 
    print C0 .__ mro__ 

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

Copier le code

 

Les résultats de l'opération sont les suivants: python mixin2.py

Cliquez (ici) pour réduire ou ouvrir

Copier le code

(<class '__main __. C0'>, <class '__main __. C1'>, <type 'object'>) 
test en C1 
test dans C0MixIn 
(<class '__main __. C0'>, <class '__main __. C0MixIn'> , <classe '__main __. C1'>, <type 'objet'>) 
(<classe '__main __. C2'>, <classe '__main __. C1'>, <classe '__main __. C0MixIn'>, <type 'objet' >) 
(<classe '__main __. C2'>, <classe '__main __. C1'>, <classe '__main __. C0MixIn'>, <type 'objet'>)

Copier le code

 

Mots clés:  python

Je suppose que tu aimes

Origine blog.csdn.net/qq_42533216/article/details/112979916
conseillé
Classement