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.

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.

Ordre de résolution des méthodes en Python
Chaque classe en Python est dérivée de la object
classe. 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 object
classe.
# 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 MultiDerived
classe l'ordre de recherche est ( MultiDerived
, Base1
, Base2
, object
). Cet ordre est également appelé linéarisation de MultiDerived
classe 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.

# 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.