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 les comparaisons. 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 l’on 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

Programmation orientée objet en Python

Afficher le cours

Instructions

Les classes Phone et BankAccount ont toutes deux été définies. Essayez d’exécuter le code tel quel avec le bouton "Exécuter le code" et examinez le résultat.

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

Exécutez à nouveau le code et examinez le résultat.

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 type()
    def __eq__(self, other):
        return (self.number == other.number)

acct = BankAccount(873555333)
pn = Phone(873555333)
print(acct == pn)
Modifier et exécuter le code