Bases & algorithmique · 6 mondes · 18 étapes
Python avancé
Le langage lui-même : texte, compréhensions, objets, erreurs, modules.
Progression
0 %
0/18 étapes terminées
Avancé · 10 min de lecture
Les objets
Quand une classe est utile, et quand elle ne l'est pas
1Définition
Une classe regroupe des données (attributs) et les comportements qui les manipulent (méthodes). _init_ construit l'instance, self la désigne, _str_ décide de son affichage. L'héritage spécialise, la composition assemble.
2Principes fondamentaux
01
Des données qui vont avec des comportements
Si l'objet ne fait que porter des valeurs, un dictionnaire ou une dataclass suffit. La classe se justifie par ses méthodes.
02
L'objet protège sa cohérence
self.energie = max(0, self.energie - cout) garantit un état valide quoi qu'on demande à la méthode.
03
« est un » contre « a un »
Un soudeur est un robot : héritage. Un robot a une batterie : composition. Confondre les deux produit des hiérarchies ingérables.
04
Toujours appeler super()._init_
Sinon les attributs du parent ne sont pas installés, et l'erreur se manifeste loin de sa cause.
3Exemples pratiques
Une classe complète
1class Robot:2 def __init__(self, nom, energie=100):3 self.nom = nom4 self.energie = energie5 6 def travailler(self, cout=30):7 self.energie = max(0, self.energie - cout)8 return self.energie9 10 def __str__(self):11 return f"{self.nom} ({self.energie}%)"Un constructeur, une méthode qui protège l'état, un affichage lisible : le minimum d'une classe utilisable.
Polymorphisme
1flotte = [Robot("Codey"), Soudeur("Vulcain", 120)]2 3for r in flotte:4 print(r.presenter()) # chacun répond à sa façonLa boucle ignore les types. Ajouter un troisième genre de robot ne changera pas cette ligne — c'est tout l'intérêt.
4Erreurs courantes
Oublier self
À éviter
def travailler(cout=30): energie = energie - coutÀ faire
def travailler(self, cout=30): self.energie = self.energie - coutPourquoi : Sans self, la méthode ne touche pas l'instance et Python se plaint du nombre d'arguments.
Héritage pour réutiliser
À éviter
class Robot(Batterie):À faire
class Robot: def __init__(self): self.batterie = Batterie()Pourquoi : Un robot n'est pas une batterie. « Réutiliser du code » n'est pas un critère d'héritage.
Une classe pour un sac de valeurs
À éviter
class Point: def __init__(self, x, y): self.x = x self.y = yÀ faire
from dataclasses import dataclass @dataclassclass Point: x: int y: intPourquoi : La dataclass écrit le constructeur, l'égalité et l'affichage à ta place.
5Subtilités à connaître
- ◆
__str__est destiné à l'humain,__repr__au développeur : c'est__repr__qu'affiche la console interactive et qui apparaît dans les listes. - ◆Les attributs déclarés dans la classe (hors
__init__) sont partagés par toutes les instances — même piège que le défaut mutable. - ◆Python n'a pas de vrai privé : le simple tiret bas
_nomest une convention, respectée par discipline et non par le langage.
6Vérifie ta compréhension
Question 1/3
Score 0
À quoi sert self ?
Envie d'essayer ? Ouvre le Labo et recopie les exemples pour les modifier.