Skip to main content
 首页 » 编程设计

python之计算类和实例哈希

2025年02月15日9Free-Thinker

我需要计算一个“散列”,它允许我唯一地标识一个对象,包括它的内容和父类。

通过比较这些“散列”,我希望能够判断一个对象自上次扫描后是否发生了变化。

我发现了很多关于如何使对象可散列的示例,但是关于如何计算父类的散列的示例并不多。

重要的是要注意比较是在不同的执行过程中进行的。我这样说是因为我认为比较对象的 id() 因为对象的 id/地址对于不同的执行可能不同。

我想求助于检查,但我担心它可能不是很有效,而且我不太确定如果对象的父类是从另一个类继承的,它会如何工作。

如果我可以访问存储实例和类代码的实际内存原始数据,我可以只计算它的哈希值。

有什么想法吗?

请您参考如下方法:

一般的想法是序列化对象,然后进行散列。那么,唯一的问题就是找到一个好的图书馆。让我们试试dill:

>>>import dill 
>>>class a(): 
    pass 
>>>b = a() 
>>>b.x = lambda x:1 
>>> hash(dill.dumps(b)) 
2997524124252182619 
>>> b.x = lambda x:2 
>>> hash(dill.dumps(b)) 
5848593976013553511 
>>> a.y = lambda x: len(x) 
>>> hash(dill.dumps(b)) 
-906228230367168187 
>>> b.z = lambda x:2 
>>> hash(dill.dumps(b)) 
5114647630235753811 
>>>  

好看吗?

莳萝:https://github.com/uqfoundation