У меня есть список объектов, которые я хочу превратиться в набор. Мои объекты содержат несколько полей что, некоторые из которых 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. " ошибка, вероятно, связана с определением класса в старом стиле, например:
class A:
pass
Вместо этого используйте новый стиль:
class A(object):
pass
Если вы переопределите функцию __cmp__, вы должны переопределить __hash__ для использования вашего объекта в наборах. В другом случае хеш считает все экземпляры объектов неравными, и функция __cmp__ никогда не будет вызвана.