Vous êtes sur la page 1sur 69

Les classes sous python

Python
CPGE-OUJDA
Lycée Omar Ibn Abdelaziz

1 M. DAHMANI 23/04/2018
Introduction
 La programmation objet s'est développée avec le
triple objectif d'améliorer la capacité des
programmes à modéliser les objets physiques,
à organiser le logiciel et à gérer les
ressources mises en œuvre. Il se caractérise
par l'accent mis sur les structures de
données, avec la notion de classe.
 Comme en programmation impérative, des
objets sont créés, modifiés, détruits. Plus que les
modifications, ce sont les créations et destructions
des objets qui constituent la trame des
programmes écrits dans ce style.
 Ce paradigme se fonde sur trois principes de
base qui sont l’encapsulation, l’héritage et le
polymorphisme.
2 M. DAHMANI 23/04/2018
LES CLASSES SOUS PYTHON

Elaboration et instanciation

3 M. DAHMANI 23/04/2018
Termes techniques:
 « Classe » est la structure ;
 « Objet » est une instance de la
classe (variable obtenue après
instanciation) ;
 « Instanciation » correspond à la
création d’un objet
 L’objet est une référence.

4 M. DAHMANI 23/04/2018
1-Classes ?
 Une classe est un type permettant de
regrouper dans la même structure :
les informations (champs, propriétés,
attributs) relatives à une entité ; les
procédures et fonctions permettant
de les manipuler (méthodes).
Champs et méthodes constituent les
membres de la classe.

5 M. DAHMANI 23/04/2018
Remarques :
 La classe est un type structuré
qui va plus loin que
l’enregistrement (ce dernier
n’intègre que les champs)
 Les champs d’une classe peuvent
être de type quelconque
 Ils peuvent faire référence à
d’instances d’autres classes
6 M. DAHMANI 23/04/2018
Exemple de déclaration d’une
classe qui va gérer un point
géométrique.

class Point:

 Par convention en Python, le nom


d'une classe ou aussi "identifiant"
débute par une lettre majuscule.
7 M. DAHMANI 23/04/2018
Définition et implémentation
d’une classe

 Ce n’est pas obligatoire, mais on


a toujours intérêt à définir les
classes dans des modules. On
peut avoir plusieurs classes dans
un module.

8 M. DAHMANI 23/04/2018
2. Notion d’objet :
 Un objet est une instance d'une classe. On
peut assimiler une classe à un type, et un
objet à une variable.
 Créer un objet à partir d'une classe est une
opération appelée "instanciation".
 >>> mon_point = Point()
 Cette instruction permet d’instancier la
classe Point, c'est-à-dire créer un objet de
type Point.
>>> Print(mon_point)
>>> <__main__.Point object at 0x0410C0D0>

9 M. DAHMANI 23/04/2018
>>> <__main__.Point object at 0x0410C0D0>

 Le message renvoyé par Python


indique que mon_point est une
instance de la classe Point(), qui est
définie elle-même au niveau principal
du programme. Elle est située dans
un emplacement bien déterminé de
la mémoire vive, dont l'adresse
apparaît ici en notation hexadécimale.

10 M. DAHMANI 23/04/2018
3. Notion de constructeur :
 Un constructeur est une méthode de classe
permettant de créer (instancier) des objets de
cette classe.
 Le constructeur réserve en mémoire
l’emplacement permettant de définir l’objet.
 En général un constructeur n’est rien d’autre
qu’une méthode, sans valeur de retour, qui porte
un nom imposé par le langage Python : "__init__
()". Cette méthode sera appelée lors de la création
de l’objet. Le constructeur peut disposer d’un
nombre quelconque de paramètres,
éventuellement aucun.

11 M. DAHMANI 23/04/2018
Exemple 1 :

12 M. DAHMANI 23/04/2018
Exemple 2 :

13 M. DAHMANI 23/04/2018
Exemple3: ModulePersonne.py

14 M. DAHMANI 23/04/2018
15 M. DAHMANI 23/04/2018
 nous exploitons le constructeur pour
énumérer les champs de la classe (pas
obligatoire, mais bonne habitude à
prendre), ils sont non typés
 le constructeur peut prendre des
paramètres en entrée. Ex. initialisation des
champs
 contrairement aux autres langages, un seul
constructeur par classe seulement
 noter le rôle du « . » dans l’accès aux
champs

16 M. DAHMANI 23/04/2018
Instanciation et utilisation dans
le programme principal
 Il faut d’abord importer le module contenant la
classe, nous lui attribuons l’alias MP ici
 Pour la création de l’instance p, nous spécifions le
module puis le nom de la classe
 Il y a () parce que c’est bien une méthode que
nous appelons à la création : le constructeur
 Le paramètre self du constructeur n’est pas à
spécifier sur l’instance
 Noter le rôle de « . » lors de l’accès aux champs
de l’instance
 Les champs sont accessibles en lecture / écriture

17 M. DAHMANI 23/04/2018
18 M. DAHMANI 23/04/2018
4. Notion de destructeur :
 Un destructeur est une méthode
permettant de libérer l’espace mémoire
occupé par l’objet.

19 M. DAHMANI 23/04/2018
5. Notion d’instances :

 Une instance, c'est tout


simplement le résultat d'une
instanciation d’une classe.
Instancier une classe est le fait
de créer un objet à partir de cette
classe. En gros, une instance est
un objet.

20 M. DAHMANI 23/04/2018
6. Attributs d'une classe :

 Les attributs de classe


permettent de stocker des
informations au niveau de la
classe. Elles sont similaires aux
variables.

21 M. DAHMANI 23/04/2018
a. Attributs d'instances :
 >>> mon_point = Point ()
 L'objet que nous venons de créer est une
coquille vide. Nous pouvons ajouter des
composants à cet objet par simple
assignation, en utilisant le système de
qualification des noms par points :
 >>> mon_point.x = 1
 >>> mon_point.y = 2

22 M. DAHMANI 23/04/2018
 Les variables ainsi définies sont des
attributs de l'objet mon_point, ou encore
des variables d'instance. Elles sont
incorporées, ou plutôt encapsulées dans
l'objet. Le diagramme d'état ci-contre
montre le résultat de ces affectations : la
variable mon_point contient la référence
indiquant l'emplacement mémoire du
nouvel objet, qui contient lui-même les
deux attributs x et y.

23 M. DAHMANI 23/04/2018
Remarque
 On peut utiliser les attributs d'un
objet dans n'importe quelle
expression, comme toutes les
variables ordinaires :

24 M. DAHMANI 23/04/2018
b. Attributs statiques :

25 M. DAHMANI 23/04/2018
7. Méthodes d'une classe
(méthodes d'instances) :
 Les méthodes d'une classe sont des
fonctions définies à l'intérieur une
classe.
 Pour définir une méthode, il faut
indiquer : Son nom et les arguments
entre des parenthèses.
 Le premier argument d’une méthode
doit être self.
26 M. DAHMANI 23/04/2018
Exemple1 : Class Point

27 M. DAHMANI 23/04/2018
Exemple2 :Programmer des méthodes
supplémentaires Pour Exemple
Personne
 Nous avons implémenté 2 méthodes
supplémentaires dans la classe.

28 M. DAHMANI 23/04/2018
Le programme principal s’en
trouve grandement simplifié.

29 M. DAHMANI 23/04/2018
Programmer des méthodes paramétrées
 Rajouter la méthode retraite() qui calcule
le nombre d’années avant l’âge limite de la
retraite.

30 M. DAHMANI 23/04/2018
Programme principal

31 M. DAHMANI 23/04/2018
Exemple

32 M. DAHMANI 23/04/2018
8. Méthodes statiques d'une classe :
 Pour obtenir des méthodes statiques, on doit les
faire précéder par un décorateur @classmethod
La fonction reçoit en paramètre classiquement sa
propre self-référence.

33 M. DAHMANI 23/04/2018
Résultat

34 M. DAHMANI 23/04/2018
9. Notion d'encapsulation :
 Le concept d’encapsulation permet en
particulier d’éviter une modification par
erreur des données d’un objet. En effet, il
n’est alors pas possible d’agir directement
sur les données d’un objet ; il est
nécessaire de passer par ses méthodes qui
jouent le rôle d’interface obligatoire. Pour
protéger les attributs d'une classe et les
rendre privés on les précède par "__" :

35 M. DAHMANI 23/04/2018
Exemple :

Donc il sera impossible de faire appel aux attributs


__x et __y depuis l'extérieur. Pour cela il faut créer
des méthodes à l'intérieur de la classe pour
manipuler ces attributs.
36 M. DAHMANI 23/04/2018
Exemple :

37 M. DAHMANI 23/04/2018
Résultat

38 M. DAHMANI 23/04/2018
COLLECTION D’OBJETS

Gérer une collection d’objets –


L’exemple des listes

39 M. DAHMANI 23/04/2018
Gérer une collection d’objets
 Python propose des outils pour la gestion des
collections d’objets hétérogènes (tuple, liste,
dictionnaire). Ils sont opérationnels pour les
instances de nos classes.

40 M. DAHMANI 23/04/2018
41 M. DAHMANI 23/04/2018
Exemple d’exécution

42 M. DAHMANI 23/04/2018
Accès indicé et modification des objets

43 M. DAHMANI 23/04/2018
Exemple d’exécution

44 M. DAHMANI 23/04/2018
Collection d’objets - Commentaires
 Les collections de nos objets (instances de nos
classes) ouvre la porte à une programmation organisée
et efficace
 Leur intérêt décuplera lorsque nous étudierons les
fichiers
 Il est judicieux d’élaborer une classe dédiée à la
gestion de la collection (où la liste serait un champ de
la classe)
 Les objets de la collection peuvent être différents.
Quand ce sont des instances de classes héritières du
même ancêtre, on parle de liste polymorphe
 Le gestionnaire de collection peut être un dictionnaire,
le mécanisme « clé – valeur » (« clé – objet » en
l’occurrence pour nous) ouvre des possibilités
immenses (ce mécanisme est très en vogue, ex. bases
45
NoSQL)
M. DAHMANI 23/04/2018
PLUS LOIN AVEC LES CLASSES

Héritage et surcharge des méthodes,


variables de classes

46 M. DAHMANI 23/04/2018
Une fonction peut renvoyer un
objet (instance de classe)
 Une fonction peut renvoyer une instance de classe

47 M. DAHMANI 23/04/2018
Le contenu des champs est le même
mais ce sont 2 références différentes.

48 M. DAHMANI 23/04/2018
10-Héritage
 L'héritage (ou dérivation) est un mécanisme qui
permet de construire des classes à partir d'autres
classes, en définissant une nouvelle classe,
appelée classe dérivée, comme une extension
d'une classe existante, appelée classe de base. La
dérivation permet à une classe dérivée d'hériter
des propriétés, c'est-à-dire des données et
fonctions membres, d'une classe de base. Ainsi,
il est possible de compléter des classes, en
rajoutant des données ou des fonctions
membres, et/ou de les personnaliser, en
redéfinissant des données (valeurs) ou des
fonctions membres.

49 M. DAHMANI 23/04/2018
Héritage
 Idée : L’héritage permet de construire
une hiérarchie de classes. Les classes
héritières héritent des champs et
méthodes de la classe ancêtre.
 Ce mécanisme nécessite des efforts
de modélisation et de conception.
 Mais au final, on améliore la lisibilité
et la réutilisabilité du code.

50 M. DAHMANI 23/04/2018
51 M. DAHMANI 23/04/2018
Exemple

52 M. DAHMANI 23/04/2018
Résultat
 On peut toujours instancier la classe Point :
 >>> mon_point = Point()
Abscisse = 0 Ordonnée = 0
 Instancions maintenant la classe Point3d() :
 >>> mon_point3d = Point3d()
Abscisse = 0 Ordonnée = 0 cote = 0

 On remarque tout d'abord que les attributs "x"


et "y" ont bien été hérité. Ensuite on remarque
que la méthode __init__ a écrasé la méthode de
la classe Point. On parle alors de surcharge de
méthode.

53 M. DAHMANI 23/04/2018
11. Notion du polymorphisme/Surcharge de
méthode :
 Comme nous l'avons vu plus haut si une classe
hérite d'une autre classe, elle hérite les méthodes
de son parent. Il est cependant possible d'écraser
la méthode de la classe parente en la
redéfinissant. On parle alors de surcharger une
méthode.

54 M. DAHMANI 23/04/2018
Exemple: class Point

55 M. DAHMANI 23/04/2018
Exemple: Point3d

56 M. DAHMANI 23/04/2018
1- Instancions la classe Point()

57 M. DAHMANI 23/04/2018
Instancions maintenant la
classe Point3d() :
 >>> mon_point3d = Point3d(1)
 >>> mon_point3d.print_point()
 Abscisse = 0 Ordonnée = 0 Cote = 1
 >>> mon_point3d.move(1,1,1)
 >>> mon_point3d.print_point()
 Abscisse = 1 Ordonnée = 1 Cote = 2
 Enfin il est possible d'appeler la méthode du
parent puis de faire la spécificité de la
méthode. On peut d'ailleurs appeler n'importe
quelle autre méthode.

58 M. DAHMANI 23/04/2018
Exemple :

59 M. DAHMANI 23/04/2018
Résultat :
 >>> mon_point3d = Point3d(1)
 >>> mon_point3d.print_point()
 Abscisse = 0 Ordonnée = 0
 Abscisse = 0 Ordonnée = 0 Cote = 1
 Les classes Point et Point3d possèdent
donc chacune une méthode de même
nom mais ces méthodes n'effectuent pas
les mêmes tâches. On parle dans ce cas de
polymorphisme.

60 M. DAHMANI 23/04/2018
Exemple :
2(class
Employe )

61 M. DAHMANI 23/04/2018
Le prog. principal ne présente aucune
difficulté

62 M. DAHMANI 23/04/2018
12-Liste polymorphe
 Idée : Une collection peut contenir des
objets de type différent. Cette
caractéristique prend un sens particulier
quand les objets sont issus de la même
lignée.
 Selon la classe réellement instanciée
(Employe ou Personne), les méthodes
saisie() et affichage() adéquates seront
appelées. C’est l’idée du polymorphisme.

63 M. DAHMANI 23/04/2018
 import ModulePersonne as MP #appel du module
 liste = [] # lliste vide
 n = int(input("Nb de pers : ")) #nb. de pers ?
 for i in range(0,n): #instanciation
 code = input("1 Personne, 2 Employé : ")
 if (code == "1"): m = MP.Personne()
 else: m = MP.Employe()
 liste.append(m)
 print("*** début saisie") #saisie liste
 for p in liste:
 print("-------")
 p.saisie()
 print(">>> début affichage") #affichage
 for p in liste:
 print("-------")
 p.affichage()
64 M. DAHMANI 23/04/2018
Exemple d’exécution

65 M. DAHMANI 23/04/2018
Variable de classes
 Une variable
de classe est
un champ
directement
accessible sur
la classe, et
qui est
partagée par
toutes les
instances de
la classe.

66 M. DAHMANI 23/04/2018
67 M. DAHMANI 23/04/2018
Attention. Les affectations ne sont pas
répercutées de la même manière selon
qu’on la réalise sur la classe ou sur une
instance. A manipuler avec prudence !!!

68 M. DAHMANI 23/04/2018
 http://eric.univ-
lyon2.fr/~ricco/cours/slides/PD%20-
%20classes%20sous%20python.pdf
 http://old.upsti.fr/spip.php?article190
6
 http://eric.univ-
lyon2.fr/~ricco/cours/cours_program
mation_python.html

69 M. DAHMANI 23/04/2018

Vous aimerez peut-être aussi