Classes & Attributs
Définitions
Classe
Une classe est un modèle pour créer des objets (aussi appelés instances). Elle définit les attributs et les méthodes communs à tous les objets créés à partir de cette classe. On peut considérer une classe comme un plan pour construire des objets.
Attribut
Un attribut est une variable associée à un objet. Les attributs définissent les caractéristiques de l’objet, comme sa couleur, sa taille ou son état. Chaque objet créé à partir d’une classe a ses propres attributs, dont les valeurs peuvent être différentes des autres objets de la même classe.
Pour définir une classe, nous utilisons la syntaxe suivante :
class MaClasse:
"""Docstring pour documenter la classe."""
def __init__(self, param1, param2):
"""Méthode d'initialisation des attributs de la classe."""
self.attribut1 = param1
self.attribut2 = param2
Dans cet exemple, nous avons défini une classe MaClasse avec une docstring pour documenter la classe. Nous avons
également défini une méthode d’initialisation __init__ pour initialiser les attributs de la classe avec les valeurs
passées en arguments lors de la création d'un objet. Le paramètre self correspond à l'objet créé par la méthode
d'initialisation. Il est passé par Python automatiquement à chaque appel de méthode. Nous en reparlerons un peu plus
tard.
Pour créer un objet à partir de cette classe, nous utilisons la syntaxe suivante :
mon_objet = MaClasse(val1, val2)
Dans cet exemple, nous avons créé un objet mon_objet à partir de la classe MaClasse en passant les valeurs val1
et val2 en arguments. Ces valeurs sont utilisées pour initialiser les attributs attribut1 et attribut2 de l’objet.
CamelCase
En Python, il est d’usage de nommer les classes en utilisant la convention de nommage CamelCase, où chaque mot commence par une majuscule et les mots sont collés les uns aux autres sans espaces. Cette convention permet de distinguer facilement les noms de classes des autres identificateurs, tels que les variables, les fonctions et les méthodes, qui suivent généralement d’autres conventions de nommage.
L’utilisation de la majuscule pour le premier mot du nom d’une classe permet également de suivre la convention générale en programmation orientée objet, où les classes représentent des concepts abstraits et sont souvent considérées comme des entités importantes dans le code. La majuscule donne une certaine importance visuelle au nom de la classe et aide à le distinguer des autres identificateurs.
Exemple
Imaginons que nous voulons créer une classe Velo pour représenter des vélos dans notre programme. Nous pouvons
définir cette classe en Python comme suit :
class Velo:
"""Représente un vélo avec une marque, un modèle et une couleur."""
def __init__(self, marque, modele, couleur):
"""Initialise les attributs du vélo avec les valeurs données."""
self.marque = marque
self.modele = modele
self.couleur = couleur
Dans cet exemple, nous avons défini une classe Velo avec trois attributs : marque, modele et couleur. Ces
attributs sont initialisés dans la méthode __init__, qui est appelée automatiquement lorsqu’un objet est créé
à partir de cette classe.
Nous pouvons maintenant créer des objets à partir de cette classe en utilisant la syntaxe suivante :
# Création d'un objet Velo
mon_velo = Velo('Pinarello', 'Dogma F', 'Rouge')
# Affichage des attributs de l'objet
print(mon_velo.marque) # Pinarello
print(mon_velo.modele) # Dogma F
print(mon_velo.couleur) # Rouge
Dans cet exemple, nous avons créé un objet mon_velo à partir de la classe Velo en utilisant la syntaxe Velo(...).
Nous avons passé les valeurs 'Pinarello', 'Dogma F' et 'Rouge' en arguments pour initialiser les attributs
marque, modele et couleur de l’objet.
Ensuite, nous avons utilisé la syntaxe mon_velo.attribut pour accéder aux attributs de l’objet et afficher leurs
valeurs. Comme on peut le voir, les attributs ont bien été initialisés avec les valeurs que nous avons passées lors de
la création de l’objet.
Modifier les attributs
En Python, il est possible de modifier les attributs d’un objet après sa création, car les attributs sont des variables associées à l’objet. Comme toute variable en Python, la valeur d’un attribut peut être modifiée en utilisant une affectation. On dit que les attributs sont mutables.
Lorsque nous créons un objet à partir d’une classe, les attributs de l’objet sont initialisés avec les valeurs
spécifiées dans la méthode __init__ de la classe. Cependant, ces valeurs ne sont pas figées et peuvent être modifiées
ultérieurement en utilisant une affectation.
La possibilité de modifier les attributs d’un objet est très utile, car elle permet de mettre à jour l’état de l’objet
au fur et à mesure que le programme s’exécute. Par exemple, dans notre exemple précédent avec la classe Velo, si nous
voulons changer la couleur de ce vélo, nous pouvons simplement modifier l’attribut couleur de l’objet mon_velo pour
refléter ce changement.
Attention
Il est important de noter que la modification des attributs d’un objet doit être effectuée avec précaution. Dans certains cas, il peut être préférable de définir des méthodes pour modifier les attributs de manière contrôlée plutôt que de les modifier directement. Cela permet de s’assurer que les modifications sont valides et cohérentes avec les autres attributs de l’objet, et avec les autres instances de la classe.
Métaphore
- Une classe, c'est le plan d'une maison (abstrait).
- Un objet, c'est la maison issue du plan (concret).
- Une autre maison, issue du même plan, est aussi un objet qui peut avoir des caractéristiques (attributs) différentes (peinture, mobilier, etc...) de la première maison.
Objets & Instances
En programmation orientée objet, les termes objet et instance sont souvent utilisés de manière interchangeable pour désigner une entité créée à partir d'une classe. Une instance est un objet qui a été créé à partir d’une classe et qui possède les attributs et les méthodes définis par cette classe.
Cependant, il existe une nuance entre ces deux termes. Un objet est un bloc de mémoire contigu qui stocke les informations réelles qui distinguent cet objet des autres objets, tandis qu'une instance est une référence à un objet. C'est un bloc de mémoire, qui pointe vers l'adresse de départ de l'endroit où l'objet est stocké.
En résumé, un objet est une entité concrète qui existe en mémoire, tandis qu'une instance est une référence à cet objet. Dans la pratique, ces deux termes sont souvent utilisés de manière interchangeable pour désigner une entité créée à partir d’une classe.
