Ответ 1
Определите метод __hash__
для возврата значимого хэша на основе полей id и area. Например:.
def __hash__(self):
return hash(self.id) ^ hash(self.area)
У меня есть список объектов, которые я хочу превратить в набор. Мои объекты содержат несколько полей, некоторые из которых o.id
и o.area
. Я хочу, чтобы два объекта были равны, если эти два поля одинаковы. т.е.: o1==o2
тогда и только тогда, когда o1.area==o2.area and o1.id==o2.id
.
Я попытался переписать __eq__
и __cmp__
, но я получил ошибку: TypeError: unhashable instance
.
Что я должен переписать?
Определите метод __hash__
для возврата значимого хэша на основе полей id и area. Например:.
def __hash__(self):
return hash(self.id) ^ hash(self.area)
"TypeError: unhashable instance." ошибка, вероятно, связана с определением класса старого типа i.e.:
class A:
pass
Вместо этого используйте новый стиль:
class A(object):
pass
Если вы переопределите функцию __cmp__, вы должны переопределить __hash__ для использования вашего объекта в наборах. В другом случае хеш рассматривает все экземпляры объектов как неравные, а функция __cmp__ никогда не будет вызвана.