Python 我需要实现散列吗?

Python 我需要实现散列吗?,python,hash,set,hashtable,hashcode,Python,Hash,Set,Hashtable,Hashcode,我有这个类,并以\uuuu main\uuu中所示的方式使用它: class User: def __init__(self, username, password, isActive): self.username = username self.password = password self.isActive = isActive def __str__(self): return str(self.__dict__) def __eq__

我有这个类,并以
\uuuu main\uuu
中所示的方式使用它:

class User:

  def __init__(self, username, password, isActive):
    self.username = username
    self.password = password
    self.isActive = isActive

  def __str__(self):
    return str(self.__dict__)

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

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

  def __hash__(self):
    # Error here: TypeError: tuple() takes at most 1 argument (3 given)
    return hash(tuple(self.username, self.password, self.isActive))

if __name__ == "__main__":
  s1 = set()
  s2 = set()

  # These two instances should be equivalent
  s1.add(User("bob", "12hhjka9#", True))
  s2.add(User("bob", "12hhjka9#", True))

  # These two instances should not be equivalent
  s1.add(User("alice", "12hhjka9#", False))
  s1.add(User("alice", "12hhjka9#", True))

  for user in s1.symmetric_difference(s2):
    print str(user)
  print "done"
该类的实例在构造后不会更改,因此在哈希实现中使用实例变量是安全的。我在执行过程中遇到此错误:

# Error here: TypeError: tuple() takes at most 1 argument (3 given)

我尝试过其他的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。救命啊

您只是错误地使用了
tuple()
函数;这里甚至不需要它

以下工作将起作用:

def __hash__(self):
    return hash((self.username, self.password, self.isActive))
tuple()
函数只能接受一个参数,但您传入了3个。你可以通过另一个iterable:

return hash(tuple([self.username, self.password, self.isActive]))

但是使用圆括号(<代码>(…)>代码>)来对值进行分组也会产生一个元组。

,您应该考虑使用命名元组而不是自己的自定义类。它内置于Python的标准库中

from collections import namedtuple
User = namedtuple('User', ('username', 'password', 'isActive'))

命名元组是元组的子类,因此哈希和等式已经得到处理。

如果删除单词
tuple
,您将自动获得一个元组。