In Python per verificare se due oggetti sono uguali, dobbiamo seguire una procedura specifica.

Se creiamo una semplice classe e verifichiamo l'uguaglianza tra due sue istanze aventi gli stessi attributi con gli stessi valori, il primo tentativo non sortirà l'effetto atteso.

class User:
    def __init__(self, name):
        self.name = name
        
user_1 = User('John')
user_2 = User('John')

print(user_1 == user_2) # False        

Questo accade perché le due istanze sono memorizzate in due indirizzi di memoria diversi. La nostra classe dovrà invece implementare il metodo dunder __eq()__ che accetta come argomento il riferimento alla seconda istanza su cui effettueremo le verifiche di uguaglianza.

class User:
    def __init__(self, name):
        self.name = name

    def __eq__(self, other):
        return self.name == other.name


user_1 = User('John')
user_2 = User('John')

print(user_1 == user_2) # True

other fa riferimento alla seconda istanza da comparare e il metodo __eq__() dovrà necessariamente restituire un valore booleano che indicherà il risultato della comparazione.