如何在python中实现一个好的__hash__函数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (151)

在实现具有多个属性的类时,处理散列的最佳方法是什么?

如何实现能够处理所有属性的正确哈希函数?

class AClass:
  def __init__(self):
      self.a = None
      self.b = None

  def __eq__(self, other):
      return other and self.a == other.a and self.b == other.b

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

  def __hash__(self):
      return hash((self.a, self.b))
提问于
用户回答回答于

你的解决方案中,返回属性元组的哈希值是好的。但请注意,你不需要列出__eq__在元组中比较的所有属性。如果某些属性通常对不平等对象具有相同的值,请将其忽略。不要让散列计算比它需要的更不划算。

用户回答回答于

这样写的话就比较危险哦:

def __eq__(self, other):
  return other and self.a == other.a and self.b == other.b

我会建议重写__eq__为:

def __eq__(self, other):
  return isinstance(other, self.__class__) and self.a == other.a and self.b == other.b

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励