将一个功能移植到我的程序的Python 3.1分支时,我遇到了一个奇怪的错误.我将其缩小到以下假设:
与Python 2.x相比,在Python 3.x中,如果一个对象有一个__eq__
方法,它就会自动消失.
这是真的?
以下是Python 3.1中发生的情况:
>>> class O(object):
... def __eq__(self, other):
... return 'whatever'
...
>>> o = O()
>>> d = {o: 0}
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
d = {o: 0}
TypeError: unhashable type: 'O'
Run Code Online (Sandbox Code Playgroud)
后续问题是,我该如何解决我的个人问题?我有一个对象ChangeTracker
存储一个WeakKeyDictionary
指向多个对象的对象,在过去的某个时间点为每个对象提供它们的值.每当签入现有对象时,更改跟踪器会说明其新的pickle是否与旧的pickle相同,因此在此期间说明对象是否已更改.问题是,现在我甚至无法检查给定对象是否在库中,因为它使得它引发了一个关于不可对象的对象的异常.(因为它有一个__eq__
方法.)我该如何解决这个问题?