CommencerCommencer gratuitement

Vérifier l’égalité des classes

Dans l’exercice précédent, vous avez défini une classe BankAccount avec un attribut number utilisé pour la comparaison. Mais si vous comparez un objet BankAccount à un objet d’une autre classe qui possède aussi un attribut number, vous pourriez obtenir des résultats inattendus.

Par exemple, considérez deux classes


class Phone:
    def __init__(self, number):
        self.number = number

    def __eq__(self, other):
        return self.number == \
               other.number

pn = Phone(873555333)

class BankAccount:
    def __init__(self, number):
        self.number = number

    def __eq__(self, other):
        return self.number == \
               other.number

acct = BankAccount(873555333)

Exécuter acct == pn renverra True, même si cela compare un numéro de téléphone à un numéro de compte bancaire.

Il est recommandé de vérifier la classe des objets passés à la méthode __eq__() pour s’assurer que la comparaison a du sens.

Cet exercice fait partie du cours

Introduction à la programmation orientée objet en Python

Afficher le cours

Instructions

  • Modifiez la définition de BankAccount pour ne renvoyer True que si l’attribut number est identique et si le type() des deux objets passés est le même.
  • Vérifiez si acct et pn sont égaux.

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

class BankAccount:
  def __init__(self, number, balance=0):
    self.number, self.balance = number, balance
      
  def withdraw(self, amount):
    self.balance -= amount 

  # Modify to add a check for the class type
  def __eq__(self, other):
    return (self.number == other.number) ____

acct = BankAccount(873555333)
pn = Phone(873555333)

# Check if the two objects are equal
print(____)
Modifier et exécuter le code