Surcharge des opérateurs : comparer des objets

Introduction à la programmation orientée objet en Python

George Boorman

Curriculum Manager, DataCamp

Égalité d’objets

class Customer:
    def __init__(self, name, balance):
        self.name, self.balance = name, balance  

customer1 = Customer("Maryam Azar", 3000)
customer2 = Customer("Maryam Azar", 3000)

# Vérifier l’égalité customer1 == customer2
False
Introduction à la programmation orientée objet en Python

Égalité d’objets

class Customer:
    def __init__(self, name, balance, acc_id):
        self.name, self.balance = name, balance
        self.acc_id = acc_id    

customer1 = Customer("Maryam Azar", 3000, 123)
customer2 = Customer("Maryam Azar", 3000, 123)

customer1 == customer2
False
Introduction à la programmation orientée objet en Python

Les variables sont des références

customer_one = Customer("Maryam Azar", 3000, 123)
customer_two = Customer("Maryam Azar", 3000, 123)

print(customer_one)
<__main__.Customer at 0x1f8598e2e48>
print(customer_two)
<__main__.Customer at 0x1f8598e2240>
  • La sortie de print() renvoie au bloc mémoire auquel la variable est affectée
  • == compare les références, pas les données
Introduction à la programmation orientée objet en Python

Comparaison personnalisée

# Deux listes différentes contenant les mêmes données
list_one = [1,2,3]
list_two = [1,2,3]

list_one == list_two
True
Introduction à la programmation orientée objet en Python

La méthode __eq__()

  • __eq__() est appelée quand deux objets d’une classe sont comparés avec ==
  • Accepte 2 arguments, self et other : les objets à comparer
  • Retourne un booléen
Introduction à la programmation orientée objet en Python

La méthode __eq__()

class Customer:
    def __init__(self, acc_id, name):
        self.acc_id, self.name = acc_id, name

# Appelé lors de l’utilisation de == def __eq__(self, other):
# Affichage print("__eq__() is called") # Retourne True si tous les attributs correspondent return (self.acc_id == other.acc_id) and (self.name == other.name)
Introduction à la programmation orientée objet en Python

Comparaison d’objets

# Deux objets égaux
customer1 = Customer(123, "Maryam Azar")
customer2 = Customer(123, "Maryam Azar")

customer1 == customer2
__eq__() is called
True
# Deux objets différents - ids différents
customer1 = Customer(123, "Maryam Azar")
customer2 = Customer(456, "Maryam Azar")

customer1 == customer2
__eq__() is called
False
Introduction à la programmation orientée objet en Python

Vérifier les types

  • Et si deux objets de classes différentes ont les mêmes attributs et valeurs ?
    • Python les évaluera comme égaux
class Customer:
    def __init__(self, acc_id, name):
        self.acc_id, self.name = idacc_id name

    def __eq__(self, other):
        # Retourne True si les objets ont les mêmes attributs
        # et sont du même type
        return (self.acc_id == other.acc_id) and (self.name == other.name)\
            and (type(self) == type(other))
Introduction à la programmation orientée objet en Python

Autres opérateurs de comparaison

Opérateur Méthode
== __eq__()
!= __ne__()
>= __ge__()
<= __le__()
> __gt__()
< __lt__()
  • Personnalisez en les définissant dans une classe
Introduction à la programmation orientée objet en Python

Passons à la pratique !

Introduction à la programmation orientée objet en Python

Preparing Video For Download...