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
我已经这样定义了一个 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