VI.
Les classes sous Python
02/12/2024 Dr Gouayon KOALA UTS MPI/L2_S3 1
V. Les classes sous Python
Remarque
Python intègre des particularités que l’on ne retrouve pas
dans les langages objets populaires (C++, Java, C#).
Ex. création à la volée d’une propriété sur un objet
(instance de classe), possibilité de l’utiliser dans les
méthodes (alors qu’elle n’apparaît nulle part dans la
définition de la classe).
Pour forger les bonnes habitudes, ce support adopte une
présentation plus conventionnelle possible par rapport
aux autres langages précités, quitte à passer sous silence
certaines possibilités de Python.
02/12/2024 Dr Gouayon KOALA UTS MPI/L2_S3 2
V. Les classes sous Python
Élaboration et instanciation
Classe ?
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.
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
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 (traité par le ramasse-miettes, destruction explicite
inutile)
02/12/2024 Dr Gouayon KOALA UTS MPI/L2_S3 3
V. Les classes sous Python
Élaboration et instanciation
Définition et implémentation d’une classe
Ce n’est pas obligatoire, mais on a • class est un mot clé permettant de définir lastructure
• Personne est le nom de la classeici
toujours intérêt à définir les classes
• """Classe Personne""" sert à documenter la classes
dans des modules. On peut avoir
• Regarder le rôle des « : » et des indentations
plusieurs classes dans un module. • init est une méthode standard appelée
Ex. ModulePersonne.py constructeur, automatiquement appelée lors de
#début définition l’instanciation
class Personne: •self représente l’instance elle-même, elle doit
"""Classe Personne""" apparaître en première position dans la définition de
toutes les méthodes, mais il ne sera pas nécessaire de la
#constructeur spécifier lors del’appel
def init (self): • nous exploitons le constructeur pour énumérer les
#lister les champs champs de la classe (pas obligatoire, mais bonne
self.nom = "" habitude à prendre), ils sont non typés
self.age = 0 •le constructeur peut prendre des paramètres en
self.salaire = 0.0 entrée. Ex. initialisation des champs
#fin constructeur •contrairement aux autres langages, un seul
constructeur par classe seulement
#fin définition • noter le rôle du « . » dans l’accès auxchamps
4
02/12/2024 Dr Gouayon KOALA UTS MPI/L2_S3
V. Les classes sous Python
Élaboration et instanciation
Instanciation et utilisation dans le programme
# -*- coding: utf -*- principal
#appel du module • Il faut d’abord importer le module contenant la
import ModulePersonne as MP classe, nous lui attribuons l’alias MP ici
• Pour la création de l’instance p, nous spécifions
#instanciation le module puis le nom de la classe
p = MP.Personne() • Il y a () parce que c’est bien une méthode que
nous appelons à la création : le constructeur
#affiche tous les membres de p • Le paramètre self du constructeur n’est pas à
spécifier sur l’instance
print(dir(p))
• Noter le rôle de « . » lors de l’accès aux champs
de l’instance
#affectation aux champs • Les champs sont accessibles en lecture / écriture
p.nom = input("Nom : ") • L’accès direct aux champs n’est pas conseillé en
p.age = int(input("Age : ")) programmation objet, mais on fera avec cette
p.salaire = float(input("Salaire : ")) année (sous Python, pour rendre un attribut
privé, il faut mettre un double _ devant le nom du
#affichage champ et créer alors des accesseurs et des
print(p.nom,", ",p.age,", ",p.salaire) mutateurs)
02/12/2024 Dr Gouayon KOALA UTS MPI/L2_S3 5
V. Les classes sous Python
Élaboration et instanciation
Définition et implémentation d’une classe
#début définition
class Personne: Programmer des méthodes supplémentaires
"""Classe Personne"""
#constructeur Nous avons implémenté 2 méthodessupplémentaires dans la classe.
def init (self): Le programme principal s’en trouve grandement simplifié.
#lister les champs
self.nom = ""
self.age = 0 # -*- coding: utf -*-
self.salaire = 0.0
#fin constructeur
#appel du module
#saisie des infos
import ModulePersonne as MP
def saisie(self):
self.nom = input("Nom : ")
self.age = int(input("Age : ")) #instanciation
self.salaire = float(input("Salaire : ")) p = MP.Personne()
#fin saisie
#affichage des infos
#saisie
def affichage(self): p.saisie()
print("Son nom est ", self.nom)
print("Son âge : ", self.age) #méthode affichage
print("Son salaire : ", self.salaire) p.affichage()
#fin affichage
#fin définition Remarque : Noter le comportementde self
Dr Gouayon KOALA UTS MPI/L2_S3 6
02/12/2024
V. Les classes sous Python
Élaboration et instanciation
Programmer des méthodes
paramétrées
02/12/2024 Dr Gouayon KOALA UTS MPI/L2_S3 7
V. Les classes sous Python
COLLECTION D’OBJETS
Gérer une collection d’objets – L’exemple des listes
Gérer une collection d’objets
02/12/2024 Dr Gouayon KOALA UTS MPI/L2_S3 8
V. Les classes sous Python
COLLECTION D’OBJETS
Gérer une collection d’objets – L’exemple des listes
Accès indicé et modification des objets
02/12/2024 Dr Gouayon KOALA UTS MPI/L2_S3 9
V. Les classes sous Python
COLLECTION D’OBJETS
Gérer une collection d’objets – L’exemple des listes
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 NoSQL)
02/12/2024 Dr Gouayon KOALA UTS MPI/L2_S3 10
V. Les classes sous Python
Héritage et surcharge des méthodes, variables de classes
Une fonction peut renvoyer un objet (instance de classe)
02/12/2024 Dr Gouayon KOALA UTS MPI/L2_S3 11
V. Les classes sous Python
Héritage et surcharge des méthodes, variables de classes
Héritage
02/12/2024 Dr Gouayon KOALA UTS MPI/L2_S3 12
V. Les classes sous Python
Héritage et surcharge des méthodes, variables de classes
Surcharge des méthodes
02/12/2024 Dr Gouayon KOALA UTS MPI/L2_S3 13
V. Les classes sous Python
Héritage et surcharge des méthodes, variables de classes
Liste polymorphe
02/12/2024 Dr Gouayon KOALA UTS MPI/L2_S3 14
V. Les classes sous Python
Héritage et surcharge des méthodes, variables de classes
Variable de classes
02/12/2024 Dr Gouayon KOALA UTS MPI/L2_S3 15