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.
#! / 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__
Les résultats de l'opération sont les suivants: python mixin2.py
Cliquez (ici) pour réduire ou ouvrir
(<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'>)
Mots clés: python