Avant d’écrire une classe, il est essentiel de comprendre **ce que l’on cherche à modéliser** et **pourquoi une classe est pertinente**.
### 🔹 Classe et objet : le principe fondamental
En Python, une **classe** est un **modèle** (ou plan) décrivant une entité :
- ce qu’elle **est** → ses **attributs** (données),
- ce qu’elle **fait** → ses **méthodes** (actions).
Un **objet** (ou *instance*) est une **réalisation concrète** de cette classe.
> 👉 Une classe définit un type, un objet est une occurrence de ce type.
### 🔹 Attributs et méthodes
Une classe regroupe deux éléments essentiels :
- **Attributs**
Ce sont les variables propres à chaque objet
*(ex. : position, état, valeur, nom…)*
- **Méthodes**
Ce sont des fonctions associées à la classe, qui décrivent les actions possibles de l’objet.
Les méthodes utilisent le mot-clé **`self`** pour accéder aux attributs de l’objet courant.
> 👉 `self` représente l’objet lui-même.
### 🔹 Le constructeur `__init__`
Le constructeur est une méthode spéciale :
- appelée automatiquement lors de la création d’un objet,
- chargée d’initialiser ses attributs.
Il garantit que tout objet est **cohérent dès sa création**.
> 👉 Sans constructeur clair, un objet peut exister dans un état incomplet ou invalide.
### 🔹 Représentation d’un objet : `__str__`
Par défaut, afficher un objet avec `print` donne une information peu lisible.
La méthode spéciale `__str__` permet de définir :
- une représentation textuelle compréhensible,
- utile pour l’affichage, le débogage et la compréhension du programme.
> 👉 Un bon `__str__` rend un objet explicite et interprétable.
### 🔹 Quand utiliser une classe ?
Une classe est pertinente lorsque :
- plusieurs variables décrivent **une même entité logique**,
- les mêmes fonctions agissent toujours sur les mêmes données,
- le programme commence à devenir difficile à lire ou à faire évoluer.
### 🔹 Pourquoi structurer son code avec des classes ?
L’utilisation des classes permet :
- une **meilleure organisation** du code,
- une **réduction des erreurs** (données et actions regroupées),
- une **meilleure lisibilité**,
- une base solide pour des concepts plus avancés (héritage, composition…).
## 📚 Manipuler en Python
> [!info] Exemple de classe en Python
> 🔗 **[Les classes en Python – Notebook](https://github.com/unilasalle-apex/Python/blob/main/Les_classes.ipynb)**