Héritage Python (avec exemples)

L'héritage nous permet de définir une classe qui prend toutes les fonctionnalités d'une classe parente et nous permet d'en ajouter d'autres. Dans ce tutoriel, vous apprendrez à utiliser l'héritage en Python.

Vidéo: héritage Python

Héritage en Python

L'héritage est une fonctionnalité puissante de la programmation orientée objet.

Cela fait référence à la définition d'une nouvelle classe avec peu ou pas de modification d'une classe existante. La nouvelle classe est appelée classe dérivée (ou enfant) et celle dont elle hérite est appelée classe de base (ou parente) .

Syntaxe d'héritage Python

 class BaseClass: corps de la classe de base classe DerivedClass (BaseClass): corps de la classe dérivée

La classe dérivée hérite des fonctionnalités de la classe de base où de nouvelles fonctionnalités peuvent y être ajoutées. Cela se traduit par une réutilisation du code.

Exemple d'héritage en Python

Pour démontrer l'utilisation de l'héritage, prenons un exemple.

Un polygone est une figure fermée avec 3 côtés ou plus. Disons que nous avons une classe appelée Polygondéfinie comme suit.

 class Polygon: def __init__(self, no_of_sides): self.n = no_of_sides self.sides = (0 for i in range(no_of_sides)) def inputSides(self): self.sides = (float(input("Enter side "+str(i+1)+" : ")) for i in range(self.n)) def dispSides(self): for i in range(self.n): print("Side",i+1,"is",self.sides(i))

Cette classe a des attributs de données pour stocker le nombre de côtés n et la magnitude de chaque côté sous forme de liste appelée côtés.

La inputSides()méthode prend en compte la grandeur de chaque côté et dispSides()affiche ces longueurs de côté.

Un triangle est un polygone à 3 côtés. Ainsi, nous pouvons créer une classe appelée Triangle qui hérite de Polygon. Cela rend tous les attributs de la classe Polygon disponibles pour la classe Triangle.

Nous n'avons pas besoin de les redéfinir (réutilisabilité du code). Le triangle peut être défini comme suit.

 class Triangle(Polygon): def __init__(self): Polygon.__init__(self,3) def findArea(self): a, b, c = self.sides # calculate the semi-perimeter s = (a + b + c) / 2 area = (s*(s-a)*(s-b)*(s-c)) ** 0.5 print('The area of the triangle is %0.2f' %area)

Cependant, la classe Trianglea une nouvelle méthode findArea()pour trouver et imprimer l'aire du triangle. Voici un exemple d'exécution.

 >>> t = Triangle() >>> t.inputSides() Enter side 1 : 3 Enter side 2 : 5 Enter side 3 : 4 >>> t.dispSides() Side 1 is 3.0 Side 2 is 5.0 Side 3 is 4.0 >>> t.findArea() The area of the triangle is 6.00

Nous pouvons voir que même si nous n'avons pas défini les méthodes comme inputSides()ou dispSides()pour la classe Triangleséparément, nous avons pu les utiliser.

Si aucun attribut n'est trouvé dans la classe elle-même, la recherche continue vers la classe de base. Cela se répète de manière récursive, si la classe de base est elle-même dérivée d'autres classes.

Remplacement de méthode en Python

Dans l'exemple ci-dessus, notez que la __init__()méthode a été définie dans les deux classes, Triangle ainsi que Polygon. Lorsque cela se produit, la méthode de la classe dérivée remplace celle de la classe de base. C'est-à-dire que __init__()dans Triangle obtient la préférence sur __init__dans Polygon.

Généralement, lors du remplacement d'une méthode de base, nous avons tendance à étendre la définition plutôt que de simplement la remplacer. La même chose est faite en appelant la méthode de la classe de base à partir de celle de la classe dérivée (appel Polygon.__init__()de __init__()in Triangle).

Une meilleure option serait d'utiliser la fonction intégrée super(). Donc, super().__init__(3)équivaut à Polygon.__init__(self,3)et est préféré. Pour en savoir plus sur la super()fonction en Python, visitez la fonction Python super ().

Deux fonctions intégrées isinstance()et issubclass()sont utilisées pour vérifier les héritages.

La fonction isinstance()renvoie Truesi l'objet est une instance de la classe ou d'autres classes dérivées de celle-ci. Chaque classe en Python hérite de la classe de base object.

 >>> isinstance(t,Triangle) True >>> isinstance(t,Polygon) True >>> isinstance(t,int) False >>> isinstance(t,object) True

De même, issubclass()est utilisé pour vérifier l'héritage de classe.

 >>> issubclass(Polygon,Triangle) False >>> issubclass(Triangle,Polygon) True >>> issubclass(bool,int) True

Articles intéressants...