module · programmation objet · 15 min

Une classe est un moule. Chaque objet est une pièce.

On écrit une fois le comportement (la classe), puis on fabrique autant d'objets qu'on veut. Chacun a ses propres valeurs, mais hérite des mêmes méthodes.

vocabulaire
la classe · les instances
Chien — le mouleclass
class Chien:
    def __init__(self, nom, age):
        self.nom = nom
        self.age = age
        self.faim = 5
        self.energie = 5

    def aboyer(self):
        self.energie -= 1
        cri = "Wouaf !" if self.age < 5 else "Wouaf wouaf !"
        print(f"{self.nom} : {cri}")

    def manger(self):
        self.faim = max(0, self.faim - 3)
les objets vivants

aucune instance encore. Avance d'un pas.

exécution pas-à-pas
étape 0 / 6

script

>>> fido = Chien("Fido", 3)
>>> rex = Chien("Rex", 7)
>>> fido.aboyer()
>>> fido.manger()
>>> rex.aboyer()
>>> print(fido.age, rex.age)

explication

— (appuie sur suivant pour démarrer)

sortie

— (console vide)

le truc magique : self

Quand tu écris fido.aboyer(), Python traduit en interne en Chien.aboyer(fido). L'objet sur lequel on appelle la méthode est passé en premier argument — c'est ce qu'on nomme self.

ce qu'on écrit

fido.aboyer()

rex.aboyer()

ce que Python fait

Chien.aboyer(fido)

Chien.aboyer(rex)

Le code est écrit une seule fois (dans la classe), mais comme self change à chaque appel, le comportement s'adapte à chaque objet. C'est le cœur de l'orienté objet.

passe au défi

Ne lance pas le code dans ta tête « au hasard » : prédis d'abord, puis révèle. À chaque appel, souviens-toi que self désigne l'instance écrite à gauche du point.

défi · prédire l'état
palier 1 / 4

fido vient de naître (faim = 5). On exécute fido.manger(). Prédis sa nouvelle valeur de faim, puis vérifie.

fido.faim = ?

séquence exécutée

1>>>fido.manger() → self = fido

ta prédiction

à retenir
  • Chaque instance porte ses propres attributs ; modifier l'un n'affecte pas l'autre.
  • Une méthode reçoit l'instance appelante en self : x.f()Classe.f(x).
  • Pour prédire un état final, filtre la séquence par cible avant de compter les effets.
retour au labo