Aller au contenu

Attributs et méthodes

Dans la page précédente, on a vu comment créer des classes et donner un état à nos objets à l’aide d’attributs.

Mais pour l’instant, nos objets sont un peu… passifs.
Ils ont des données, mais ils ne font encore rien.

C’est là qu’entrent en jeu les méthodes.


Attributs : ce qu’un objet a

Petit rappel rapide.

Les attributs sont des variables qui appartiennent à un objet. Ils représentent son état.

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

Ici :

  • nom et vie sont des attributs
  • chaque objet Personnage a les siens

Méthodes : ce qu’un objet peut faire

Une méthode, c’est simplement une fonction définie dans une classe.

Elle représente une action que l’objet peut effectuer.

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

    def attaquer(self, degats):
        self.vie = self.vie - degats

La différence avec une fonction classique ?

  • une méthode agit sur l’objet lui-même
  • elle a accès à ses attributs via self

Le rôle de self

self représente l’objet sur lequel on agit.

Quand on écrit :

p = Personnage("Alice", 100)
p.attaquer(10)

Python comprend en réalité :

Personnage.attaquer(p, 10)

C’est pour ça que :

  • self est obligatoire
  • et qu’il doit toujours être le premier paramètre d’une méthode

Une méthode modifie l’état de l’objet

Une méthode sert très souvent à modifier l’état de l’objet.

p = Personnage("Alice", 100)
p.attaquer(30)

print(p.vie)

Ce programme affiche :

70

L’objet p a changé. C’est exactement ce qu’on veut.


Quizz

Regardez ce code :

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

    def incrementer(self):
        valeur = valeur + 1
Quel est le problème dans la méthode `incrementer` ?
- Il manque un paramètre
- La méthode devrait renvoyer une valeur
- *La variable `valeur` ne modifie pas l’attribut de l’objet
- Le nom de la méthode est incorrect
> `valeur` est une variable locale. Il faut utiliser `self.valeur` pour modifier l’état de l’objet.

Pourquoi ne pas utiliser des fonctions normales ?

On pourrait se dire :

“Pourquoi ne pas juste écrire une fonction attaquer(p, degats) ?”

Techniquement, ça marcherait. Mais conceptuellement, c’est moins propre.

Avec des méthodes :

  • le comportement est attaché à l’objet
  • le code est plus lisible
  • on évite de passer l’objet partout en paramètre
  • on regroupe données et actions au même endroit

Bref : le code reflète mieux le problème.


Exercice pratique

Reprenez la classe CompteBancaire de la page précédente.

Ajoutez-lui :

  • une méthode deposer(montant) qui ajoute de l’argent au solde
  • une méthode retirer(montant) qui enlève de l’argent au solde

Puis :

  1. créez un compte
  2. effectuez plusieurs dépôts et retraits
  3. affichez le solde après chaque opération

Ne gérez pas encore les cas compliqués (solde négatif, erreurs, etc.). On veut juste comprendre comment les méthodes modifient l’état.


En résumé

Vous savez maintenant :

  • faire la différence entre attributs et méthodes
  • écrire des méthodes dans une classe
  • utiliser self correctement
  • modifier l’état d’un objet depuis une méthode

Dans la page suivante, on va s’intéresser à un point très important : comment l’état d’un objet évolue dans le temps, et pourquoi ça peut parfois être piégeux.