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
2019Mé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 : 2019Ité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
