Python - a confronto 2 oggetti identici restituisce False?

voti
0

Ho definito una classe come ad esempio:

class User:

    Name = 
    Age = 
    Gender = 

    def __init__(self, var1, var2, var3):
        self.Name = var1
        self.Age = var2
        self.Gender = var3

    def __hash__(self):
        return hash(self.Name)

Ora, quando creo due oggetti identici:

User1 = User(Ted, 43, M)
User2 = User(Ted, 43, M)

E tentare di confrontarli:

print(User1 == User2)

Esso restituisce False?

È pubblicato 21/10/2016 alle 19:37
dall'utente
In altre lingue...                            


2 risposte

voti
6

È necessario eseguire l'override del __eq__metodo:

def __eq__(self, other):
    if isinstance(other, User):
        return self.Name == other.Name and \
               self.Age == other.Age and \
               self.Gender == other.Gender
    return NotImplemented
Risposto il 21/10/2016 a 19:42
fonte dall'utente

voti
2

La risposta Mureinik fornisce è corretta, ma incompleto.

Solo ignorando i __eq__risultati del metodo di comportamento imprevisto quando si verifica la disuguaglianza.

Ad esempio, User1 != User2tornerà Truecon solo il __eq__sovrascritto.

Si vuole definire sia __eq__e __ne__:

def __eq__(self, other):
    if isinstance(other, User):
        return self.Name == other.Name and \
           self.Age == other.Age and \
           self.Gender == other.Gender
    return NotImplemented

def __ne__(self, other):
    return not self.__eq__(other)

Ora, quando si esegue il confronto, si otterrà risultati attesi:

User1 = User("Ted", "43", "M")
User2 = User("Ted", "43", "M")
print(User1 != User2)
print(User1 == User2)

stampe:

False
True
Risposto il 21/10/2016 a 19:49
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more