Séance 3 · 1 heure

Les méthodes

Fil rouge du chapitre : créer un jeu de rôle

Rappel Repérer la structure d'une classe

personnage.py
class Personnage:
    def __init__(self, nom, pv, force):
        self.nom = nom
        self.pv = pv
        self.force = force
À l'oral — Si je crée orc = Personnage("Orc", 40, 8), que vaut orc.force ?

Démonstration Donner une action à l'objet

Pour l'instant, nos personnages existent mais ne savent rien faire. On veut qu'Aria puisse attaquer un Gobelin.

personnage.py
class Personnage:
    def __init__(self, nom, pv, force):
        self.nom = nom
        self.pv = pv
        self.force = force

    def attaquer(self, cible):
        cible.pv = cible.pv - self.force
        print(f"{self.nom} attaque {cible.nom} !")

Déroulons l'appel ensemble :

combat.py
hero = Personnage("Aria", 100, 15)
monstre = Personnage("Gobelin", 30, 5)

hero.attaquer(monstre)
À chercher ensemble — Dans hero.attaquer(monstre), qui est self à l'intérieur de la méthode ? Qui est cible ?

Réponse : self reçoit hero (l'objet à gauche du point), cible reçoit monstre (l'argument entre parenthèses).

Comparaison Méthode vs fonction classique

comparaison.py
# Une fonction classique : indépendante
def attaquer_fonction(attaquant, cible):
    cible.pv = cible.pv - attaquant.force

# Une méthode : self est fourni automatiquement
def attaquer(self, cible):
    cible.pv = cible.pv - self.force

Ce qui change à l'appel : attaquer_fonction(hero, monstre) contre hero.attaquer(monstre).

Exercice guidé — Se soigner et vérifier si on est vivant

Ajouter deux méthodes à la classe Personnage :

  1. se_soigner(self, quantite) : augmente self.pv de quantite.
  2. est_vivant(self) : renvoie True si self.pv > 0, False sinon.
Voir la correction →