Surcharge de l'égalité
Lorsque vous comparez deux objets d'une classe personnalisée à l'aide de ==
, Python compare par défaut uniquement les morceaux de mémoire vers lesquels les objets pointent, et non les données contenues dans les objets. Pour remplacer ce comportement, la classe peut implémenter une méthode spéciale qui accepte deux arguments, les objets à comparer, et renvoie True
ou False
. Cette méthode sera implicitement appelée lorsque deux objets seront comparés.
La classe BankAccount
du chapitre précédent est disponible dans la classe script.py
. Il possède deux attributs, balance
et number
, et une méthode withdraw()
. Deux comptes bancaires ayant le même solde ne sont pas nécessairement le même compte, mais un compte bancaire a généralement 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
Introduction à la programmation orientée objet en Python
Instructions
- Modifiez la méthode
__init__()
pour accepter un nouvel argument appelénumber
et initialiser un nouvel attributnumber
. - Définissez une méthode pour comparer si l'attribut
number
de deux objets est égal.
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)