Programmation orientée objet en Python

1. A propos du cours

  1. Auteur : Nicolas Pronost (Université Claude Bernard Lyon 1 – LIRIS)
  2. Type : Support de cours (diapositives PDF) – Programmation orientée objet en Python
  3. Langue : Français
  4. Licence : Non spécifiée sur le document (usage pédagogique universitaire présumé)

2. Courte description du cours

Introduction structurée à la POO en Python : classes, objets, attributs, méthodes, membres spéciaux, constructeurs/destructeurs, surcharge d’opérateurs, héritage simple et multiple, encapsulation, super(), MRO, et exercices guidés (géométrie 2D).

3. Longue description du cours

Ce cours présente de façon progressive la programmation orientée objet (POO) en Python, dans le contexte d’un enseignement universitaire (UCBL – LIRIS). Il commence par la philosophie de la POO : en POO, tout est objet, une classe est un type défini par le programmeur, et un objet est une collection d’attributs (données membres) et de méthodes (fonctions membres) manipulant ces données. L’auteur insiste sur le fait qu’on peut instancier autant d’objets que nécessaire, chaque instance représentant un état propre du type défini par la classe.

On passe ensuite à la définition d’une classe avec le mot-clé class, puis à la création d’objets et à l’accès aux membres via l’opérateur point. Le paramètre self est expliqué : il référence l’instance courante et est ajouté implicitement lors de l’appel d’une méthode d’instance (obj.m() est traduit en Classe.m(obj)). La distinction entre données d’instance et données de classe est illustrée, de même que la possibilité d’ajouter ou de supprimer des membres « à la volée » dans Python interprété.

Le document couvre les membres spéciaux (noms commençant par __) dont __doc__, __name__ et __dict__, puis détaille le constructeur __init__ pour initialiser les attributs lors de l’instanciation et le destructeur __del__ pour exécuter une action lors de la destruction de l’objet. Des exemples clairs montrent comment initialiser des structures (par ex. un nombre complexe) et comment la destruction peut être interceptée.

Le cours explique la représentation textuelle des objets : __repr__ (représentation non ambiguë, utile au débogage) et __str__ (représentation conviviale pour print()). Des exemples comparatifs montrent la différence entre l’affichage par défaut d’une instance et les représentations personnalisées pour des types comme un nombre complexe.

Une large section est consacrée à la surcharge d’opérateurs : on voit comment implémenter __add__, puis une liste des opérateurs arithmétiques (__sub__, __mul__, __truediv__, etc.), des opérateurs combinés (__iadd__, __isub__, …), des opérateurs de comparaison (__eq__, __lt__, …) et même des opérateurs logiques comme __invert__. Chaque point est illustré par du code minimaliste.

La partie suivante traite de l’héritage. Après une introduction aux notions « mère / fille », le document montre l’héritage simple : réutilisation de méthodes, redéfinition (override), et accès explicite à une méthode de la classe mère. Un résumé opérationnel rappelle : déclaration de l’héritage, appels de méthodes mères, accès aux membres depuis la fille, et règles de résolution lorsque des membres existent dans plusieurs classes. Les fonctions issubclass() et isinstance() sont introduites.

Le cours aborde ensuite l’héritage multiple : ordre des mères, influence sur la recherche des membres, initialisation coordonnée de plusieurs hiérarchies. On y trouve aussi des remarques importantes : usage des préfixes _ et __ pour l’encapsulation, intérêt de super(), rappel que toute classe hérite de object, et gestion des ambiguïtés en héritage multiple.

Pour ancrer les notions, la fin du document propose une série d’exercices autour d’une hiérarchie de formes géométriques 2D (trapèze, parallélogramme, rectangle, carré, triangle, triangle équilatéral, cercle, point) avec calcul d’aires, ajout d’une classe SymetriqueAxial et mise en œuvre d’un héritage multiple. Un diagramme de classes est suggéré puis traduit en code Python.

Au total, ce support fournit un parcours complet et pragmatique de la POO en Python : des bases aux mécanismes avancés, ponctué d’exemples riches et d’exercices structurants.

4. Aperçu du document

Leave a Reply