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

Exemple
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

Exemple
1flotte = [Robot("Codey"), Soudeur("Vulcain", 120)]2 3for r in flotte:4    print(r.presenter())    # chacun répond à sa façon

La 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 - cout

Pourquoi : 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: int

Pourquoi : 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 _nom est 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.