Héritage Python
Héritage Python
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 didacticiel, vous apprendrez à utiliser l'héritage en Python.
Vidéo :héritage Python
L'héritage en Python
L'héritage est une fonctionnalité puissante de la programmation orientée objet.
Il 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 la classe de base (ou parente) .
Syntaxe d'héritage Python
class BaseClass: Body of base class class DerivedClass(BaseClass): Body of derived class
La classe dérivée hérite des fonctionnalités de la classe de base où de nouvelles fonctionnalités peuvent lui être ajoutées. Cela permet de réutiliser le 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 à 3 côtés ou plus. Dites, nous avons une classe appelée Polygon
défini 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 la forme d'une liste appelée côtés .
Le inputSides()
la méthode prend la magnitude de chaque côté et dispSides()
affiche ces longueurs de côté.
Un triangle est un polygone à 3 côtés. Nous pouvons donc créer une classe appelée Triangle qui hérite de Polygon . Cela rend tous les attributs de Polygon classe disponible pour le Triangle classe.
Nous n'avons pas besoin de les redéfinir (réutilisabilité du code). 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 Triangle
a 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 de méthodes comme inputSides()
ou dispSides()
pour la classe Triangle
séparément, nous avons pu les utiliser.
Si un attribut n'est pas trouvé dans la classe elle-même, la recherche continue jusqu'à 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 __init__()
la méthode a été définie dans les deux classes, Triangle ainsi Polygone . Lorsque cela se produit, la méthode de la classe dérivée remplace celle de la classe de base. C'est-à-dire __init__()
dans Triangle obtient la préférence sur le __init__
dans Polygone .
Généralement, lors du remplacement d'une méthode de base, nous avons tendance à étendre la définition plutôt qu'à 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 (en appelant Polygon.__init__()
à partir de __init__()
en Triangle
).
Une meilleure option serait d'utiliser la fonction intégrée super()
. Donc, super().__init__(3)
est équivalent à Polygon.__init__(self,3)
et est préféré. Pour en savoir plus sur le super()
fonction en Python, visitez la fonction Python super().
Deux fonctions intégrées isinstance()
et issubclass()
sont utilisés pour vérifier les héritages.
La fonction isinstance()
renvoie True
si 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
Python