Предположим, у меня есть class a
, который имеет функцию __eq__(self,other)
. Теперь я хочу иметь словарь, где ключи являются экземплярами класса (и номерами значений, но это не должно иметь значения). Тогда я получаю сообщение об ошибке:Могут ли ключи словаря быть экземплярами класса?
unhashable type: 'a'
В documenation он говорит, что я должен определить __eq__
и __cmp__
для того, чтобы определить __hash__
, но это не представляется возможным, так как мой класс не сравнимый !!
Как это решить, люди!
редактировать: Хорошо я сделал это работает только _ эк _ и _ хэш _ метод, но я до сих пор не уверен, что если питон использует метод хеширования в в операции или _ экв _ метод (который должен быть в случае, я надеюсь)
def __hash __ (self): return hash (self.value^31 & 15) – smac89
что должно быть self.value be? Класс должен быть абстрактным! – varantir
@varantir Вы можете просто добавить фиктивный оператор печати к '__hash__', чтобы проверить, является ли это тот, который он вызывает. Кроме того, я предлагаю вам проверить мой ответ, чтобы убедиться, что ваша хеш-функция звучит. –