Surcharge de l'égalité
Lorsqu'on compare deux objets d'une classe personnalisée avec ==, Python compare par défaut seulement les blocs mémoire vers lesquels pointent les objets, 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 retourne 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 à votre disposition dans script.py. Elle possède deux attributs, balance et number, ainsi qu'une méthode withdraw(). Deux comptes bancaires avec 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 avec le même numéro de compte doivent être considérés comme identiques.
Cette activité fait partie du cours
Introduction à la programmation orientée objet en Python
Instructions de l’exercice
- Modifiez la méthode
__init__()pour accepter un nouvel argument appelénumberet initialiser un nouvel attributnumber. - Définissez une méthode pour comparer si l'attribut
numberde deux objets est égal.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
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)