Aller au contenu

Classe, objet et état

Dans la page précédente, on a parlé de programmation orientée objet sans écrire une seule ligne de code. On a juste réfléchi en termes de “choses” qui ont des données et des actions.

Maintenant, il est temps de transformer ces idées en vrai code Python.


Classe et objet : la différence

Commençons par un point très important.

  • Une classe, c’est un plan, un modèle
  • Un objet, c’est une instance concrète de ce plan

Un peu comme :

  • un plan de maison
  • et une maison construite à partir de ce plan

En Python, on définit une classe avec le mot-clé class.

class Personnage:
    pass

Pour l’instant, cette classe ne fait rien. Mais on peut déjà créer un objet à partir de cette classe :

p = Personnage()

Ici :

  • Personnage est la classe
  • p est un objet (une instance de Personnage)

L’état d’un objet

Un objet n’est pas juste une étiquette. Il possède un état, c’est-à-dire des données qui lui sont propres.

Par exemple, un personnage peut avoir :

  • un nom
  • des points de vie

Ces données, on les appelle des attributs.


Le constructeur __init__

Quand on crée un objet, on veut souvent lui donner un état initial. C’est exactement le rôle du constructeur.

En Python, le constructeur s’appelle __init__.

class Personnage:
    def __init__(self, nom, vie):
        self.nom = nom
        self.vie = vie

Ici :

  • __init__ est appelé automatiquement à la création de l’objet
  • self représente l’objet en cours de création
  • self.nom et self.vie sont des attributs de l’objet

On peut maintenant créer de vrais objets :

p1 = Personnage("Alice", 100)
p2 = Personnage("Bob", 80)

Chaque objet a son propre état.


Accéder aux attributs

Pour accéder à un attribut d’un objet, on utilise un point . :

print(p1.nom)
print(p1.vie)

On peut aussi les modifier :

p1.vie = p1.vie - 20

Ce qui modifie l’état de cet objet précis, et pas celui des autres.


Chaque objet est indépendant

Même s’ils viennent de la même classe, les objets sont indépendants.

p1 = Personnage("Alice", 100)
p2 = Personnage("Bob", 100)

p1.vie -= 30

print(p1.vie)
print(p2.vie)

Ce programme affiche :

70
100

Modifier l’un ne modifie pas l’autre. C’est l’un des points clés de la programmation orientée objet.


Quizz

Regardez ce code :

class Compteur:
    def __init__(self, valeur):
        self.valeur = valeur

a = Compteur(5)
b = Compteur(5)
a.valeur -= 1

print(b.valeur)
Qu’affiche ce programme ?
- 4
- *5
- Une erreur
> `a` et `b` sont deux objets différents. Modifier l’état de `a` ne modifie pas celui de `b`.

Exercice pratique

Créez une classe CompteBancaire qui représente un compte bancaire.

Un compte bancaire :

  • a un solde
  • ce solde est défini à la création du compte

Votre programme doit :

  1. créer deux comptes avec des soldes différents
  2. afficher le solde de chaque compte
  3. modifier le solde d’un seul compte
  4. vérifier que l’autre n’a pas changé

Le but de cet exercice n’est pas encore de faire des retraits ou des dépôts, mais de bien comprendre la notion d’état propre à chaque objet.


En résumé

Vous savez maintenant :

  • définir une classe
  • créer des objets à partir d’une classe
  • utiliser un constructeur (__init__)
  • donner un état à un objet
  • comprendre que chaque objet est indépendant

Dans la page suivante, on va ajouter des comportements à nos objets, et voir comment ils peuvent agir sur leur propre état.