Типы, которые определяют `__eq__`, не подлежат чтению?
У меня была странная ошибка при переносе функции на форк Python 3.1 моей программы. Я сузил это до следующей гипотезы:
В отличие от Python 2.x, в Python 3.x, если объект имеет__eq__
метод это автоматически unhashable.
Это правда?
Вот'Что происходит в Python 3.1:
>>> class O(object):
... def __eq__(self, other):
... return 'whatever'
...
>>> o = O()
>>> d = {o: 0}
Traceback (most recent call last):
File "", line 1, in
d = {o: 0}
TypeError: unhashable type: 'O'
Последующий вопрос: как мне решить мою личную проблему? У меня есть объектChangeTracker
который хранитWeakKeyDictionary
это указывает на несколько объектов, давая каждому значение их дамп соления в определенный момент времени в прошлом. Всякий раз, когда существующий объект регистрируется, трекер изменений сообщает, идентичен ли его новый пикл своему старому, и, следовательно, говорит, изменился ли объект за это время. Проблема в том, что теперь я могуt даже проверить, находится ли данный объект в библиотеке, потому что это вызывает исключение того, что объект не подлежит обработке. (Потому что это имеет__eq__
метод.) Как я могу обойти это?