Surcharge de l’égalité
Lorsque vous comparez deux objets d’une classe personnalisée avec ==, Python compare par défaut uniquement les références des objets, et non les données qu’ils contiennent. Pour remplacer ce comportement, la classe peut implémenter la méthode spéciale __eq__(), qui accepte deux arguments — les objets à comparer — et renvoie True ou False. Cette méthode sera appelée implicitement lorsque deux objets sont comparés.
La classe BankAccount du chapitre précédent est disponible dans le panneau du script. Elle possède un attribut balance et une méthode withdraw(). Deux comptes bancaires ayant le même solde ne sont pas forcément le même compte, mais un compte bancaire a en général un numéro de compte, et deux comptes ayant le même numéro de compte doivent être considérés comme identiques.
Cet exercice fait partie du cours
Programmation orientée objet en Python
Instructions
Essayez de sélectionner le code des lignes 1 à 7 puis d’appuyer sur le bouton "Exécuter le code". Créez ensuite quelques objets BankAccount dans la console et comparez-les.
- Modifiez la méthode
__init__()pour accepter un nouveau paramètre,number, et initialiser un nouvel attributnumber. - Définissez une méthode
__eq__()qui renvoieTruesi l’attributnumberde deux objets est identique. - Examinez les instructions print et le résultat dans la console.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
class BankAccount:
# MODIFY to initialize a number attribute
def __init__(self, balance=0):
self.balance = balance
def withdraw(self, amount):
self.balance -= amount
# Define __eq__ that returns True if the number attributes are equal
def ____(____, ____):
return ____.number == ____.____
# Create accounts and compare them
acct1 = BankAccount(123, 1000)
acct2 = BankAccount(123, 1000)
acct3 = BankAccount(456, 1000)
print(acct1 == acct2)
print(acct1 == acct3)