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 :
nometviesont des attributs- chaque objet
Personnagea 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 :
selfest 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 :
- créez un compte
- effectuez plusieurs dépôts et retraits
- 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
selfcorrectement - 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.