Définir et appeler des méthodes d'instance, choisir leur visibilité et leurs paramètres, et utiliser les méthodes de classe, les méthodes statiques et les fonctions imbriquées.
1Situer
Une épicerie de quartier à Agadir veut un panier d'achat pour sa future application. Le panier doit pouvoir ajouter un article, retirer un article, calculer le total avec une remise éventuelle, et se créer directement à partir d'une liste de courses. Chacune de ces actions est une méthode.
2Comprendre
Ce qui se passe lors d'un appel de méthode
On appelle la méthode ajouter sur l'objet panier, avec trois arguments.
1 / 5
Une méthode est une fonction définie à l’intérieur d’une classe. Elle décrit ce que l’objet sait faire.
On l’appelle avec un point : panier.ajouter("Thé", 18, 2). Python transforme cet appel en Panier.ajouter(panier, "Thé", 18, 2) : c’est pour cela que self reçoit l’objet.
Comme pour les attributs : total() est publique, _sous_total() est protégée (usage interne), __calcul() est privée.
Trois sortes de méthodes
Sorte
Décorateur
Premier paramètre
Exemple
d’instance
aucun
self (l’objet)
panier.total()
de classe
@classmethod
cls (la classe)
Panier.depuis_liste(...)
statique
@staticmethod
aucun
Panier.en_euros(108)
Les fonctions imbriquées
Une fonction peut être définie dans une méthode. Elle n’existe que pendant l’appel et sert à découper un calcul sans encombrer la classe : c’est le cas de appliquer() dans total().
Exemple simple
La télécommande
Chaque bouton de la télécommande déclenche une action sur la télévision : allumer, changer de chaîne, monter le son. Appeler une méthode, c'est appuyer sur un bouton de l'objet.
Exécutez le code : les objets et leurs attributs s'afficheront ici.
4Pratiquer
Exercice 1 · Compter les articles
Ajoutez une méthode nb_articles() qui renvoie le nombre total d'unités dans le panier (en tenant compte des quantités).
Voir le corrigé
defnb_articles(self):
returnsum(q for _, _, q inself.articles)
Exercice 2 · Paramètres nommés
Appelez ajouter en nommant les paramètres, dans un ordre différent de la définition. Pourquoi est-ce utile ?
Voir le corrigé
panier.ajouter(quantite=3, nom="Eau", prix=5)
# Les paramètres nommés rendent l'appel lisible et évitent# d'inverser le prix et la quantité par erreur.
Exercice 3 · Méthode de classe ou statique ?
Pour chaque méthode, dites si elle doit être d'instance, de classe ou statique : (1) vider() vide le panier ; (2) depuis_ticket(texte) crée un panier à partir d'un ticket ; (3) arrondir(montant) arrondit au centime.
Voir le corrigé
1. d'instance : elle modifie un panier précis (self)
2. de classe : elle fabrique un nouvel objet (cls)
3. statique : elle n'a besoin ni du panier ni de la classe