Introduction à la programmation orientée objet en Python
Classes
Comme tout autre langage de programmation orientée objet, Python prend en charge les classes.
- Les classes sont créées par mot-clé class.
- Les attributs sont les variables qui appartiennent à la classe.
- Les attributs sont toujours publiques et sont accessibles à l’aide de l’opérateur point (.). Ex .: NomClass.NomAttribut
class Personne: Nom="ESSADDOUKI" Prenom="Mostafa" annee=2019 p=Personne() print(p.Nom) p.Prenom='Ismail' print(p.Prenom) print(p.annee)
Méthodes
Une méthode est un groupe de code destiné à effectuer une tâche particulière dans le code de votre Python.
- Une fonction qui appartient à une classe s'appelle une méthode.
- Toutes les méthodes nécessitent le paramètre 'self'. Si vous avez codé dans un autre langage POO, vous pouvez considérer 'self' comme le mot-clé 'this' utilisé pour l’objet en cours. La variable d’instance actuelle est alors masquée. 'self' Fonctionne généralement comme ceci.
- Le mot clé 'def' est utilisé pour créer une nouvelle méthode.
class Personne: nom='' prenom='' annee=0 def modifier(self,nom,prenom,annee): self.nom=nom self.prenom=prenom self.annee=annee p=Personne() p.modifier('ESSADDOUKI','Mostafa',2019) print(p.nom) print(p.prenom) print(p.annee)
ESSADDOUKI Mostafa 2019
Méthode __init__
La méthode __init__ est similaire aux constructeurs en C ++ et Java. Il est exécuté dès qu'un objet d'une classe est instancié. Cette méthode est utile pour effectuer l’initialisation que vous voulez faire avec votre objet.
class Personne: nom='' prenom='' # constructeur de la classe def __init__(self, nom, prenom): self.nom=nom self.prenom=prenom def affiche(self): print("Nom : ",self.nom) print("Prénom : ",self.prenom)
Variables de classe et d'instance (ou attributs)
En Python, les variables d'instance sont des variables dont la valeur est assignée à l'intérieur d'un constructeur ou d'une méthode avec self.
Les variables de classe sont des variables dont la valeur est attribuée à la classe.
class Personne: # variable de la classe departement='Informatique' # constructeur de la classe def __init__(self, nom, prenom): # variables d'instances self.nom=nom self.prenom=prenom # ajouter un attribut email à une instance de classe def SetEmail(self,email): self.email=email def affiche(self): print('Nom : ',self.nom) print('Prénom : ',self.prenom) print('E-mail : ',self.email) p1=Personne('ESSADDOUKI','Mostafa') p1.SetEmail('essaddouki@gmail.com') p1.affiche() print('-----------------') p2=Personne('Kayouh','Mohamed') p2.affiche()
Nom : ESSADDOUKI Prénom : Mostafa E-mail : essaddouki@gmail.com ----------------- Nom : Kayouh Prénom : Mohamed Traceback (most recent call last): File "classe2.py", line 26, in p2.affiche() File "classe2.py", line 19, in affiche print('E-mail : ',self.email) AttributeError: 'Personne' object has no attribute 'email'
Ici l'attribut email c'est un attribut d'instance p1 et non pas un attribut de la classe
Héritage
L'héritage est défini comme une manière par laquelle une classe particulière hérite des fonctionnalités de sa classe de base. La classe de base est également appelée «Superclasse» et la classe qui hérite de la Superclasse est appelée «Sous-classe».
class Personne: nom='' prenom='' # constructeur de la classe def __init__(self, nom, prenom): self.nom=nom self.prenom=prenom def affiche(self): print("Nom : ",self.nom) print("Prénom : ",self.prenom) class Etudiant(Personne): annee_inscription=2018 # constructeur de la classe def __init__(self, nom, prenom,annee): # appeler le contructeur de la "super-class" super().__init__(nom, prenom) self.annee_inscription=annee def affiche(self): # appeler la méthode affiche de la 'super-class' super().affiche() # afficher l'année d'inscription print("Année d'inscription : ",self.annee_inscription) etd=Etudiant('ESSADDOUKI','Ismail',2019) etd.affiche()
Nom : ESSADDOUKI Prénom : Ismail Année d'inscription : 2019
Itérateurs
Les itérateurs sont des objets sur lesquels on peut effectuer une itération.
- Python utilise la méthode __iter __ () pour renvoyer un objet itérateur de la classe.
- L'objet itérateur utilise ensuite la méthode __next __ () pour obtenir l'élément suivant.
- Les boucles for s'arrêtent lorsque StopIteration Exception est levée.
class Tableau: donnee=[] index=-1 # constructeur de la classe def __init__(self, tab): self.donnee=tab.copy() def __iter__(self): return self def __next__(self): if self.index == len(self.donnee)-1: raise StopIteration self.index+= 1 return self.donnee[self.index] T=[1, 3, 5, 7, 8, 13, 20, 25] Tab=Tableau(T) for elm in Tab: print(elm)
1 3 5 7 8 13 20 25