Python - 比较 2 个相同的对象 returns 错误?

Python - comparing 2 identical objects returns False?

我已经这样定义了一个 class:

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)

现在,当我创建两个相同的对象时:

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

并尝试比较它们:

print(User1 == User2)

它returnsFalse

您需要覆盖 __eq__ 方法:

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

提供的答案是正确的,但不完整。

检查不等式时,仅重写 __eq__ 方法会导致意外行为。

例如,User1 != User2 将 return True 仅覆盖 __eq__

您想同时定义 __eq____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)

现在当您进行比较时,您会得到预期的结果:

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

打印:

False
True