Héritage multiple en POO Python

1. A propos de l'héritage en POO Python

L'héritage est un mécanisme clé de la programmation orientée objet (POO) qui permet à une classe d'hériter des attributs et des méthodes d'une autre classe. En Python, l'héritage est implémenté en créant une classe fille qui hérite de la classe parente. La classe fille peut alors utiliser et modifier les attributs et les méthodes hérités, ainsi que définir ses propres attributs et méthodes.
La classe parente est également appelée la classe de base, tandis que la classe fille est également appelée la sous-classe ou la classe dérivée. La sous-classe peut hériter des attributs et des méthodes de la classe de base en utilisant la syntaxe suivante :

La sous-classe peut ensuite définir ses propres attributs et méthodes, ou redéfinir les attributs et méthodes hérités de la classe de base.
L'héritage est utile pour plusieurs raisons. Tout d'abord, il permet de réutiliser le code existant et d'éviter la duplication de code. Si plusieurs classes ont des fonctionnalités communes, ces fonctionnalités peuvent être placées dans une classe de base et les autres classes peuvent hériter de cette classe de base. Cela réduit le temps de développement et évite les erreurs de duplication de code. Pour plus de détails voir: Héritage En POO Python

2. Héritage multiple en POO Python

  • L'héritage multiple est une fonctionnalité de la programmation orientée objet (POO) qui permet à une classe d'hériter des attributs et des méthodes de plusieurs classes de base. En Python, cette fonctionnalité est implémentée en créant une classe fille qui hérite de plusieurs classes de base. La classe fille peut alors utiliser et modifier les attributs et les méthodes hérités de chacune des classes de base.
  • L'héritage multiple est utile dans plusieurs cas, par exemple lorsqu'une classe a besoin de fonctionnalités de plusieurs classes de base différentes. Dans ce cas, la classe fille peut hériter des classes de base nécessaires, ce qui permet d'éviter la duplication de code et de réutiliser le code existant.

Syntaxe

La syntaxe pour l'héritage multiple en Python est la suivante :

Dans ce cas, la sous-classe hérite des attributs et des méthodes de toutes les classes de base listées dans la déclaration de classe.

Exemple

Explication du code:

  1. Calcul1: est une classe qui contient une méthode nommée somme() permettant de calculer la somme de deux nombres
  2. Calcul2: est une classe qui contient une méthode nommée multiplication() permettant de calculer la multiplication de deux nombres
  3. class Calcul3(Calcul1,Calcul2): est une classe qui hérite des deux classes 'Calcul1' et 'Calcul2'. Ainsi 'Calcul3' hérite les deux méthodes somme() et multiplication
  4. Calcul = Calcul3(): est un objet d'instance auquel on appliquer les 3 méthodes somme(), multiplication() et division()




3. La méthode MRO (Method Resolution Order)

  • Malgré tous les avantages qu'il offre, l'héritage multiple peut également causer des problèmes de conception si les classes de base ont des méthodes ou des attributs qui se chevauchent. Dans ce cas, il peut être difficile de savoir quelle méthode ou quel attribut sera hérité par la sous-classe. Ce problème est connu sous le nom de "problème du diamant", car il survient lorsque deux classes de base ont une classe de base commune.
  • Par exemple, si une classe A hérite de deux classes B et C, et que les classes B et C héritent toutes deux d'une classe D commune, alors la classe A héritera en réalité des attributs et des méthodes de la classe D deux fois. Cela peut causer des problèmes de conflit et de comportement imprévisible.
  • Pour résoudre ce problème, Python utilise une méthode de résolution de conflits appelée MRO (Method Resolution Order). La MRO détermine l'ordre dans lequel les méthodes et les attributs sont hérités en résolvant les conflits de manière hiérarchique. Cela permet de garantir que les attributs et les méthodes sont hérités dans un ordre déterminé et cohérent.

Voici un exemple d'héritage multiple avec la méthode MRO pour une classe A qui hérite de deux classes B et C, et que les classes B et C héritent toutes deux d'une classe D :

Exemple (héritage multiple avec la méthode MRO)

Explication du code:

  1. Au début on crée 4 classes D, B, C, et A : Les classes B et C héritent de la classe D, et la classe A hérite des classes B et C.
  2. L'ordre de résolution MRO de la classe A: sera déterminé en fonction de l'ordre de la déclaration des classes parentes dans la déclaration de la classe A. Dans ce cas, la classe B est déclarée en premier, suivie de la classe C. Cela signifie que l'ordre de résolution MRO de la classe A sera [A, B, C, D, object].
  3. Lorsqu'un objet de la classe A est créé: la méthode __init__() de la classe A est appelée en premier, puis les méthodes d'initialisation des classes parentes B et C sont appelées dans l'ordre de résolution MRO à l'aide de la fonction super(). Enfin, la méthode __init__() de la classe D est appelée.
  4. Lorsque les méthodes sont appelées sur l'objet obj_a: Python suit l'ordre de résolution MRO pour déterminer quelle méthode appeler en premier. Par exemple, lorsque la méthode method_a() est appelée sur l'objet obj_a, Python cherche d'abord cette méthode dans la classe A. Si elle n'est pas trouvée, Python cherche la méthode dans la classe B, puis dans la classe C, et enfin dans la classe D.

Remarque

Dans cet exemple, toutes les méthodes sont présentes dans les classes parentes, mais si une méthode était présente dans plusieurs classes parentes, Python utiliserait l'ordre de résolution MRO pour déterminer quelle méthode utiliser.

 

Younes Derfoufi
CRMEF OUJDA

1 thought on “Héritage multiple en POO Python

Leave a Reply