如何计算python类对象的哈希值

如何计算python类对象的哈希值,python,oop,hash,md5,Python,Oop,Hash,Md5,在python3中,我有一个类。如下图所示: class Foo: def __init__(self): self.x = 3 def fcn(self, val): self.x += val 然后我实例化该类的对象,如下所示: new_obj = Foo() new_obj2 = Foo() def get_hashables(self): return {'data': self.data, 'result': self.res

在python3中,我有一个类。如下图所示:

class Foo:
    def __init__(self):
        self.x = 3
    def fcn(self, val):
        self.x += val
然后我实例化该类的对象,如下所示:

new_obj = Foo()
new_obj2 = Foo()
def get_hashables(self):
    return {'data': self.data, 'result': self.result}
现在,当我散列这些对象时,会得到不同的散列值。我需要它们返回相同的散列,因为它们是相同的对象(理论上)

你知道我该怎么做吗

class Foo:
    def __init__(self):
        self.x = 3
    def fcn(self, val):
        self.x += val
    def __hash__(self):
        return hash(self.x)
这将使用
self.x
计算哈希值;这意味着当
self.x
相同时,哈希将相同。您可以从
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。更多信息。

它们不是同一个对象。表达式
Foo()。您的两个调用返回两个独立的对象,它们位于不同的内存位置,每个对象都包含自己的
x
属性的私有实例


您可能需要阅读Python类和实例理论。

感谢所有回答的人。您是对的,实例化同一类对象的新实例实际上并不相同,因为它在内存中占据不同的位置。我最终做的与@nosklo建议的类似

我创建了一个“get_hashables”函数,该函数返回一个字典,其中包含构成唯一类对象的类的所有属性,如下所示:

new_obj = Foo()
new_obj2 = Foo()
def get_hashables(self):
    return {'data': self.data, 'result': self.result}

然后,我的主要方法将获取这些“可散列”变量,并对它们进行散列,以生成散列本身。

如果愿意,您可以自由实现
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。然而,我怀疑你的意图,因为“它们是相同的对象”在大多数出现在脑海中的定义中是不正确的。也许你认为这些物体应该是相等的?它们不是,不是理论上的,也不是实践上的。看看我的答案,它们是同一个物体。也就是说,您希望您的
哈希
函数表现出什么特性?您希望在该函数中体现哪些
Foo
属性?换句话说,如果您发现
hash(a)==hash(b)
,您希望对对象
a
b
有什么保证?@Prune:考虑到哈希冲突,确定
hash(a)!=hash(b)
应该保证
a
b
@user2357112:我意识到这一点——但我希望平等问题将重点放在期望的东西上。