Héritage multiple Python: qu'est-ce que c'est et comment l'utiliser?

Dans ce didacticiel, vous découvrirez l'héritage multiple en Python et comment l'utiliser dans votre programme. Vous découvrirez également l'héritage à plusieurs niveaux et l'ordre de résolution des méthodes.

Héritage multiple Python

Une classe peut être dérivée de plus d'une classe de base en Python, similaire à C ++. C'est ce qu'on appelle l'héritage multiple.

Dans l'héritage multiple, les fonctionnalités de toutes les classes de base sont héritées dans la classe dérivée. La syntaxe de l'héritage multiple est similaire à celle de l'héritage unique.

Exemple

 class Base1: pass class Base2: pass class MultiDerived(Base1, Base2): pass

Ici, la classe MultiDerived est dérivée des classes Base1 et Base2.

Héritage multiple en Python

La classe MultiDerived hérite des classes Base1 et Base2.

Héritage Python à plusieurs niveaux

Nous pouvons également hériter d'une classe dérivée. C'est ce qu'on appelle l'héritage à plusieurs niveaux. Cela peut être de n'importe quelle profondeur en Python.

Dans l'héritage multiniveau, les fonctionnalités de la classe de base et de la classe dérivée sont héritées dans la nouvelle classe dérivée.

Un exemple avec la visualisation correspondante est donné ci-dessous.

 class Base: pass class Derived1(Base): pass class Derived2(Derived1): pass

Ici, la classe Derived1 est dérivée de la classe Base et la classe Derived2 est dérivée de la classe Derived1.

Héritage à plusieurs niveaux en Python

Ordre de résolution des méthodes en Python

Chaque classe en Python est dérivée de la objectclasse. C'est le type le plus basique de Python.

Donc, techniquement, toutes les autres classes, intégrées ou définies par l'utilisateur, sont des classes dérivées et tous les objets sont des instances de la objectclasse.

 # Output: True print(issubclass(list,object)) # Output: True print(isinstance(5.5,object)) # Output: True print(isinstance("Hello",object))

Dans le scénario d'héritage multiple, tout attribut spécifié est recherché en premier dans la classe actuelle. S'il n'est pas trouvé, la recherche se poursuit dans les classes parentes en profondeur d'abord, de gauche à droite sans rechercher deux fois la même classe.

Ainsi, dans l'exemple ci - dessus MultiDerivedclasse l'ordre de recherche est ( MultiDerived, Base1, Base2, object). Cet ordre est également appelé linéarisation de MultiDerivedclasse et l'ensemble de règles utilisé pour trouver cet ordre est appelé Ordre de résolution de méthode (MRO) .

La MRO doit empêcher l'ordre de priorité locale et assurer également la monotonie. Il garantit qu'une classe apparaît toujours avant ses parents. En cas de parents multiples, l'ordre est le même que celui des tuples des classes de base.

Le MRO d'une classe peut être considéré comme l' __mro__attribut ou la mro()méthode. Le premier renvoie un tuple tandis que le second renvoie une liste.

 >>> MultiDerived.__mro__ (, , , ) >>> MultiDerived.mro() (, , , )

Voici un exemple d'héritage multiple un peu plus complexe et sa visualisation avec le MRO.

Visualisation de l'héritage multiple en Python
 # Demonstration of MRO class X: pass class Y: pass class Z: pass class A(X, Y): pass class B(Y, Z): pass class M(B, A, Z): pass # Output: # (, , # , , # , , # ) print(M.mro())

Production

 (,,,,,,)

Pour connaître l'algorithme réel sur la façon dont la MRO est calculée, visitez Discussion sur la MRO.

Articles intéressants...