Python Language Mixins


Exemple

Dans un langage de programmation orienté objet, un mixin est une classe qui contient des méthodes à utiliser par d'autres classes sans devoir être la classe parente de ces autres classes. La façon dont ces autres classes accèdent aux méthodes de mixin dépend de la langue.

Il fournit un mécanisme pour l'héritage multiple en permettant à plusieurs classes d'utiliser les fonctionnalités communes, mais sans la sémantique complexe de l'héritage multiple. Les mixins sont utiles lorsqu'un programmeur souhaite partager des fonctionnalités entre différentes classes. Au lieu de répéter le même code encore et encore, les fonctionnalités communes peuvent simplement être regroupées dans un mixin, puis héritées dans chaque classe qui le requiert.

Lorsque l'on utilise plus d'un mixin, l'ordre des mixins est important. Voici un exemple simple:

class Mixin1(object):
    def test(self):
        print "Mixin1"

class Mixin2(object):
    def test(self):
        print "Mixin2"

class MyClass(Mixin1, Mixin2):
    pass

Dans cet exemple, nous appelons MyClass et la méthode de test ,

>>> obj = MyClass()
>>> obj.test()
Mixin1

Le résultat doit être Mixin1 car Order est de gauche à droite. Cela pourrait donner des résultats inattendus lorsque les super-classes y sont associées. Donc, l'ordre inverse est plus juste comme ceci:

class MyClass(Mixin2, Mixin1):
    pass

Le résultat sera:

>>> obj = MyClass()
>>> obj.test()
Mixin2

Les mixins peuvent être utilisés pour définir des plug-ins personnalisés.

Python 3.x 3.0
class Base(object):
    def test(self):
        print("Base.")

class PluginA(object):
    def test(self):
        super().test()
        print("Plugin A.")

class PluginB(object):
    def test(self):
        super().test()
        print("Plugin B.")

plugins = PluginA, PluginB

class PluginSystemA(PluginA, Base):
    pass

class PluginSystemB(PluginB, Base):
    pass

PluginSystemA().test()
# Base.
# Plugin A.

 PluginSystemB().test()
# Base.
# Plugin B.