top of page

La programmation orientée objet en Python

A. Le concept de classe

a. Généralité


Une classe peut être vue comme un moule qui permet de concevoir des objets. C'est la description des caractéristiques d’un ou de plusieurs objets. Par exemple une classe « Vehicule » pourrait avoir comme caractéristique le nombre de roues. On pourrait alors créer l’objet « moto_1 » fabriqué à partir de la classe « Vehicule » dont la caractéristique « nombre de roues » serait instanciée avec la valeur « 2 ». On dit alors que « moto_1 » est une instance de la classe. Un objet peut donc se définir comme l’expression d’une classe. Dans Python on manipule régulièrement des objets : listes, dictionnaires…


A. Le concept de classe

b. Attribut

i. Attribut d’objet


Un attribut est une caractéristique de l'objet. Une classe peut avoir plusieurs attributs. Il s’agit d’un ensemble de variables qui caractérises un objet. Par exemple la caractéristique « nombre_roues » est un attribut. La classe « Vehicule » pourrait également avoir « couleur » pour attribut.

Les attributs d’objet sont spécifiques à chaque instance de la classe. Chaque instance a sa propre copie de ces attributs. Ainsi chaque instance de la classe peut avoir des valeurs différentes pour ces attributs. L’objet « moto_1 » est une copie unique de l’instanciation des attributs de la classe. D’autres objets peuvent partager ou avoir des valeurs différentes pour ces attributs.


A. Le concept de classe

b. Attribut

ii. Attribut de classe


Les attributs de classe sont des attributs partagés par toutes les instances de la classe. Lorsqu'ils sont modifiés, tous les objets de la classe subissent la modification. Ils sont souvent utilisés pour stocker des valeurs partagées par toutes les instances de la classe. Par exemple dans la classe « Vehicule » on pourrait dire que n’importe quelle instance de la classe devrait avoir un kilométrage de début instancié à « 0 ». Les attributs de classe sont définis à l’extérieur des attributs d’objet.


A. Le concept de classe

b. Attribut

iii. Le constructeur


Les paramètres d’une classe font référence aux variables entre les parenthèses de la classe. Ces paramètres permettent de fournir les données nécessaires pour créer l’objet. Les attributs d’objets sont donc instanciés lors du paramétrage de la classe.


On appelle « constructeur » de classe l’ensemble des paramètres et plus précisément l’ordre des variables à l’intérieur des paramètres. Un constructeur de classe est une méthode spéciale définit par le code suivant : __init__. On découvrira plus bas dans le code comment on utiliser cette méthode.

L'élément "self" permet de manipuler les attributs d’un objet spécifique. "self" fait référence à l'instance d’une classe. Il est utilisé pour accéder aux éléments spécifiques de cette instance.


A. Le concept de classe

b. Attribut

iv. Création d’une classe


Maintenant traduisons ça en code Python.


En sortie nous aurons respectivement : "2", "4", "0", "0".


A. Le concept de classe

c. Méthode

i. Méthode d’objet


Une méthode est une fonction qui est définie à l'intérieur d'une classe. Elle est relative à un ensemble d’action que l’on souhaite réalisable par l’objet. Elle peut avoir recours aux attributs. Dans cet exemple nous allons rajouter la méthode "avancer()" dans la classe "Vehicule".



A. Le concept de classe

c. Méthode

ii. Méthode de classe


Une méthode de classe est une méthode associée à une classe plutôt qu'à une instance de cette classe. Contrairement aux méthodes d'objet, les méthodes de classe n'ont pas accès aux attributs d'une instance de la classe. Les méthodes de classe prennent « cls » comme premier paramètre. L'utilisation des méthodes de classes permet de ne pas instancier un objet pour accéder à la méthode.



En sortie nous aurons respectivement : "1", "2".


A. Le concept de classe

c. Méthode

iii. Méthode statique


Une méthode statique est une méthode qui n’est pas liée à une instance particulière de la classe. Ce n’est pas non plus une méthode de classe. Ce type de méthode ne prend n’y « self » n’y « cls » en premier paramètre.

En sortie nous aurons : "('1 kilomètre = 1,05€', 1,05)"


B. L’héritage

a. L’héritage simple


Permet de créer de nouvelles classes en se basant sur des classes existantes. La classe nouvellement créée (appelée classe fille, classe dérivée ou encore sous-classe) hérite des attributs et des méthodes de la classe existante (appelée classe mère, de base ou encore superclasse). La classe fille peut ajouter ses propres attributs et méthodes. Elle peut modifier le comportement hérité. L'utilisation de la méthode « super() » permet d’utiliser des attributs et méthodes de la classe parente depuis la classe fille.

En sortie nouas aurons : "4" et "10".


B. L’héritage

b. L’héritage multiple


En Python, l'héritage multiple est un concept qui permet à une classe d’hériter de plusieurs classes parentes. La méthode « super() » serait utile ici uniquement si une des deux classes parent portait un nom d’attribut identique.


En sortie nous aurons respectiivement : "2" et "Paul".


B. L’héritage

c. Le polymorphisme


Le polymorphisme se produit lorsque une classe hérite et modifie une méthode d’une classe parent.


En sortie nous aurons respectivement : "les animaux communiquent entre eux", "aboyer" et "miauler".


B. L’héritage

d. La surcharge de méthode


Dans un sens large, la surcharge de méthode fait référence à la capacité de définir plusieurs méthodes avec le même nom au sein d'une classe tout en permettant à ces méthodes d'accepter un nombre différent de paramètres. En Python, la surcharge de méthode n'est pas prise en charge car Python ne permet pas de définir plusieurs méthodes avec le même nom dans une même classe. Au lieu de cela, Python utilise la dernière définition de la méthode avec le même nom.


B. L’héritage

e. Les classes abstraites


Une classe abstraite est conçues pour être héritée par d'autres classes mais qui elles-mêmes ne sont pas destinées à être instanciées. Les méthodes abstraites définissent un contrat commun que les classes dérivées doivent respecter. Cela garantit que chaque classe fille expose certaines fonctionnalités attendues.


C. Encapsulation

a. Généralité


Concept qui consiste à restreindre l’accès aux attributs d’un objet. Cela permet de garantir l’intégrité ou la sécurité d’un objet. Dans cet exemple, la protection des attributs « immat » et « frais_kil » se traduit par un double underscore situé avant le nom de l’attribut. Pour protéger une méthode de classe le principe est le même.


C. Encapsulation

b. Accesseur et mutateur


Les accesseurs (getters) et les mutateurs (setteurs) sont des méthodes qui permettent d’accéder et modifier les valeurs d’un attribut. Cela permet de contrôler l’accès aux attributs privés.

En sortie nous aurons respectivement : "aa-001-aa", None, "zz-999-zz".


D. Méthodes spéciales


Les méthodes spéciales sont des méthodes reconnaissables par les doubles underscores qui les entourent. Elles sont utilisées pour définir le comportement de certaines opérations courantes sur des objets. La méthode « __init__ » initialise un objet lors de sa création.

La méthode spéciale « __dict__ » renvoie un dictionnaire contenant les attributs et leurs valeurs pour une instance de classe. Cela permet d'accéder dynamiquement aux attributs d'une instance sans avoir à les connaître à l'avance. Permet d’accéder aux attributs protégés.

La méthode spéciale « __del__ » est utilisée pour gérer la destruction d'une instance de classe. Cette méthode est appelée un « destructeur ». Cette méthode peut générer des erreurs si elle est mal utilisée.

La méthode spéciale « __str__ » est utilisée pour personnaliser la représentation sous forme de chaîne.

En sortie nous aurons :


E. Les décorateurs


Un décorateur permet de modifier ou d'enrichir le comportement d'une autre fonction ou méthode sans en modifier son code source. Les décorateurs sont couramment utilisés pour ajouter des fonctionnalités aux fonctions ou méthodes existantes. Par exemple, on peut utiliser un décorateur pour mesurer le temps d'exécution d’une fonction.



F. Les interfaces


Une interface est une spécification que les classes doivent suivre. C’est un ensemble d’attributs et de méthodes qu’un ensemble de classes doit suivre. C’est un moyen d’assurer la conformité à des normes. Cela permet une meilleure interopérabilité entre différentes classes. Une classe abstraite est un exemple d’interface.



Comments


bottom of page