假设我有一些 Person 实体,我想知道一个是否在列表中:
person in people?
我不在乎“对象的 ID”是什么,只是它们的属性是相同的。所以我把它放在我的基类中:
# value comparison only
def __eq__(self, other):
return (isinstance(other, self.__class__) and self.__dict__ == other.__dict__)
def __ne__(self, other):
return not self.__eq__(other)
但是为了能够测试集合中的相等性,我还需要定义哈希所以......
# sets use __hash__ for equality comparison
def __hash__(self):
return (
self.PersonID,
self.FirstName,
self.LastName,
self.etc_etc...
).__hash__()
问题是我不想列出每个属性,也不想每次属性更改时都修改哈希函数。
那么这样做可以吗?
# sets use __hash__ for equality comparison
def __hash__(self):
values = tuple(self.__dict__.values())
return hash(values)
这是理智的,而不是太多的性能损失吗?在网络应用程序的情况下。
非常感谢。