Académique Documents
Professionnel Documents
Culture Documents
La POO en Python
I. Notions de classe et d’objet :
Une manière simple d’aborder la notion de classe est de considérer celle-ci comme une « usine »
permettant de fabriquer des objets possédant des caractéristiques (attributs) et des actions
exécutables (méthodes) communes.
Exemple :
1
Programmation Python DSI
Un objet créé à partir d’une classe est une instance de cette classe. Dans l’exemple ci-dessous,
les objets porsche_911 et corvette_z06 sont deux objets de type Voiture c’est-à-dire deux
instances différentes de cette classe.
Les attributs
Les méthodes (y compris le constructeur)
1. Constructeur et attribut :
C’est une méthode spéciale nommée en python __init__, qui peut prendre des paramètres et qui
permet d’instancier la classe par la suite. Aussi, le constructeur peut permettre d’initialiser les
futurs objets crées. Si une classe n’a aucun constructeur, elle en a un par défaut qui est le
constructeur sans paramètres.
Exemple :
En python, la définition des attributs doit être faite dans le constructeur. Si on veut rendre un
attribut facultatif, on ajoute None comme suit :
2
Programmation Python DSI
2. Les méthodes :
On peut définir une ou plusieurs méthodes dans notre classe python. Pour cela, on suit la syntaxe
suivante :
Pour créer des objets d’une classe, on sort de la classe (commencer du niveau 1
d’indentation). Pour créer un objet d’une classe donnée, il faut utiliser la syntaxe suivante :
3
Programmation Python DSI
3. Encapsulation en Python :
L’encapsulation est un mécanisme qui consiste à rassembler les données et les méthodes au sein
d’une classe en cachant l’implémentation de l’objet. Pour implémenter le principe
d’encapsulation, les langages de programmation orientés objets introduisent et utilisent la notion
de visibilité.
On a 3 types de visibilité :
4
Programmation Python DSI
Remarque importante :
Si pour une raison donnée, nous voulons définir un attribut public ou une méthode privée, alors,
on utilise la règle générale d’implémentation de l’encapsulation en python :
Les membres privés doivent avoir un nom qui commence par __ (double
underscore)
Les membres publics ont un nom simple
c. Les éléments protégés :
Si une classe donnée va être une classe mère, alors, elle doit rendre ses attributs protégés au lieu
de privés. En effet, si elle définit des attributs privés, alors, les classes filles qui héritent ces attributs
n’arrivent pas à les utiliser !! pour définir un élément protégé, python propose de commencer son
nom par un _ (underscore).
Exemple :
4. Accesseurs et modificateurs :
Comme les attributs sont privés,on doit créer des méthodes qui permettent l’accès ( pour
connaître la valeur de l’attribut , pour modifier cette valeur)
Les Getters (Accesseurs) : méthodes qui permettent de connaître les valeurs des attributs.
Les Setters(modificateurs) : sont des méthodes qui permettent de modifier les attributs
Exemple :
5
Programmation Python DSI
Alors, on peut accéder à l’information voulue via la méthode get ou set. Par exemple, on peut
créer un objet sans l’initialiser. Puis, utiliser les modificateurs pour initialiser les valeurs des
attributs.
Exemple :
On crée une classe Stagiaire avec les attributs numéro d’inscription, age, nom, prénom, note1 et
note2. On ajoute ‘=None’ pour chaque paramètre dans le constructeur pour dire que c’est un
paramètre facultatif :
6
Programmation Python DSI
Donc, on peut créer un objet stagiaire sans informations (objet vide non encore initialisé). Puis,
on va utiliser les modificateurs pour ajouter les informations du s2 :
Ainsi, nous avons pu créer deux objets s1 et s2 avec deux méthodes différentes :
a. Attribut de classe :
Jusqu’à présent, les attributs déclarés étaient des attributs d’instance. C’est à dire que les attributs
de chaque objet, peuvent avoir des valeurs différentes (numéro, nom, etc ).
Un attribut de classe est un attribut dont la valeur est la même pour toutes les instances d’une
même classe. Pour déclarer un tel attribut, on le définit comme dans l’exemple suivant :
7
Programmation Python DSI
b. Méthode de classe :
Une méthode de classe ne doit pas être envoyée à une instance donnée de cette classe, mais plutôt
à la classe elle-même.
Exemple : On va utiliser un attribut de classe privé. Donc, on crée une méthode getCmp() qui sera
une méthode statique (Méthode de classe ) :
L’héritage est un type de relations entre classes. En effet, il traduit la relation “est un”.
L’héritage est le mécanisme de transmission des propriétés (attributs et méthodes) d’une classe à
une autre ;
La classe de base (classe mère, parente) transmet toutes ses propriétés transmissibles aux
classes dérivées (classe fille, enfant);
8
Programmation Python DSI
La classe dérivée possède ses propres attributs et méthodes, que la classe de base ne
connaît pas. De plus, la classe dérivée peut redéfinir (améliorer, spécialiser, ….) les
méthodes transmises par la classe de base
1. Héritage en Python :
Exemple :
Ou encore :
9
Programmation Python DSI
Exercice d’application :
1. Écrivez une classe Point qui représente un point sur le plan. Elle possède deux attributs
flottants x et y.
2. Ajouter un constructeur afin de permettre l’initialisation de x et de y.
3. Ajouter les accesseurs(getter) et les mutateurs(setter) des attributs
4. Ajouter une méthode distance() qui retourne la distance du point à l’origine du repère.
5. Ajouter une méthode distance( point) qui calcule la distance du point “self” au point
point.
6. Ajouter une méthode translate(dx, dy) qui translate le point de dx sur les abscisses et de
dy sur les ordonnées.
7. Écrire une classe Segment qui possède deux attributs point1 et point2 de type Point
représentant les deux extrémités du segment.
8. Ajouter une méthode length() qui calcule et retourne la longueur du segment.
9. Ecrire une classe Test_Points qui permet de créer deux points A et B et d’afficher la
distance qui les sépare
10. Translater le point A sur l’axe des abscisses et afficher ses nouvelles coordonnées
11. Translater le B point sur l’axe des ordonnées ses nouvelles coordonnées
12. Afficher la longuer du segment [AB]
10