我需要计算一个“散列”,它允许我唯一地标识一个对象,包括它的内容和父类。
通过比较这些“散列”,我希望能够判断一个对象自上次扫描后是否发生了变化。
我发现了很多关于如何使对象可散列的示例,但是关于如何计算父类的散列的示例并不多。
重要的是要注意比较是在不同的执行过程中进行的。我这样说是因为我认为比较对象的 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
>>>
好看吗?