CommencezCommencez gratuitement

Surcharge de l'égalité

Lorsque vous comparez deux objets d'une classe personnalisée avec ==, Python compare par défaut seulement les références d'objet, et non les données contenues dans les objets. Pour remplacer ce comportement, la classe peut implémenter la méthode spéciale __eq__(), qui accepte deux arguments — les objets à comparer — et retourne 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 disponible dans le panneau de script. Elle a un attribut balance et 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

Programmation orientée objet en Python

Voir le cours

Instructions de l’exercice

Essayez de sélectionner le code des lignes 1 à 7 et d'appuyer sur le bouton "Exécuter le code". Ensuite, créez 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 attribut number.
  • Définissez une méthode __eq__() qui retourne True si l'attribut number de deux objets est égal.
  • Examinez les instructions print et le résultat dans la console.

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)
    
Modifier et exécuter le code