CommencerCommencer gratuitement

Vérification de l'égalité des classes

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

Prenons l'exemple de deux classes



classe Téléphone :

  def __init__(self, number) :

     self.number = number



  def __eq__(self, other) :

    return self.number == \

          autre.numéro




pn = Phone(873555333)

classe BankAccount :

  def __init__(self, number) :

     self.number = number



  def __eq__(self, other) :

    return self.number == \

           autre.numéro




acct = BankAccount(873555333)

L'exécution de acct == pn renverra True, même si nous comparons un numéro de téléphone à un numéro de compte bancaire.

Il est conseillé de vérifier la classe des objets transmis à la méthode __eq__() pour s'assurer que la comparaison a un sens.

Cet exercice fait partie du cours

Programmation orientée objet en Python

Afficher le cours

Instructions

Les classes Phone et BankAccount ont été définies. Essayez d'exécuter le code tel quel en utilisant le bouton "Exécuter le code" et examinez la sortie.

  • Modifiez la définition de BankAccount pour qu'elle ne renvoie True que si l'attribut number est identique et que l'attribut type() des deux objets qui lui sont transmis est identique.

Exécutez le code et examinez à nouveau la sortie.

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