Héritage multiple en Python

Ishaan Shrivastava 21 mars 2022
Héritage multiple en Python

L’héritage nous permet d’utiliser des fonctionnalités de classe parent dans une classe enfant et est une fonctionnalité essentielle de la programmation orientée objet. Il aide à la réutilisation et à la transitivité des données de la classe parent à la classe enfant et compense la perte de données.

L’héritage multiple se produit lorsque la classe enfant hérite des méthodes et des fonctionnalités de deux ou plusieurs classes parentes. Il est avantageux de dériver toutes les données à la fois. Pourtant, d’un autre côté, cela s’accompagne d’une complexité et d’une ambiguïté d’utilisation. Il est ambigu de dire quelle caractéristique est de quel parent si plusieurs parents possèdent la même caractéristique. Cela se produit lorsque l’héritage multiple n’est pas utilisé ou implémenté correctement. L’héritage virtuel, l’utilisation de l’ordre de résolution de méthode (MRO) et la fonction super() peuvent en quelque sorte réduire ses risques.

Nous voyons un exemple de base d’héritages multiples dans le code suivant.

class Father:
    def drive(self):
        print("Father drives his son to school")


class Mother:
    def cook(self):
        print("Mother loves to cook for her son")


class Son(Father, Mother):
    def love(self):
        print("I love my Parents")


c = Son()
c.drive()
c.cook()
c.love()

Production:

Father drives his son to school
Mother loves to cook for her son
I love my parents

La classe enfant Son est dérivée des classes mères Father et Mother, ce qui lui permet d’utiliser les fonctions drive() et cook() pour donner le résultat souhaité.

La fonction super() fait référence à la classe parente ou sœur dans la classe enfant héritée et renvoie un objet temporaire qui permet à la classe enfant d’utiliser toutes les méthodes de la superclasse.

Cela se fait généralement en cas d’ambiguïté lorsque l’héritage commence à se croiser, c’est-à-dire lorsque les deux classes parentes sont également dérivées de la super classe de base.

Par example,

class Animals:
    def __init__(self, animalsName):
        print(animalsName, "is an animal.")


class Mammal(Animals):
    def __init__(self, Name):
        print(Name, "is a mammal.")
        super().__init__(Name)


class donotFly(Mammal):
    def __init__(self, name):
        print(name, "cannot fly.")
        super().__init__(name)


class donotSwim(Mammal):
    def __init__(self, name):
        print(name, "cannot swim.")
        super().__init__(name)


class Cat(donotSwim, donotFly):
    def __init__(self):
        print("A cat.")
        super().__init__("Cat")


cat = Cat()
print("")
bat = donotSwim("Bat")

Production:

A cat.
Cat cannot swim.
Cat cannot fly.
Cat is a mammal.
Cat is an animal.

Bat cannot swim.
Bat is a mammal.
Bat is an animal.

Une classe enfant Cat est créée, héritée par les classes biparentales donotswim et donotfly. Ensuite, la classe des Mammifères en hérite elle-même. La classe Mammals hérite en outre des propriétés de la superclasse Animals. Par conséquent, dans ce cas, nous avons utilisé la fonction super() pour accéder facilement aux méthodes de la superclasse.

Article connexe - Python Class