CommencerCommencer gratuitement

Surcharge de l’égalité

Lorsque vous comparez deux objets d’une classe personnalisée avec ==, Python compare par défaut uniquement les zones mémoire vers lesquelles pointent les objets, et non les données qu’ils contiennent. 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 est 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 dispose généralement d’un numéro de compte, et deux comptes avec 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

Afficher le cours

Instructions

  • Modifiez la méthode __init__() pour accepter un nouvel argument appelé number et initialiser un nouvel attribut number.
  • 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)
    
Modifier et exécuter le code