Создать набор объектов класса, которые содержат этот набор атрибутов? - PullRequest
0 голосов
/ 07 апреля 2020
class Something:
    def __init__(self,x,y):
        self.x = x
        self.y = y
        self.z = set()

    def __hash__(self):
        return hash((self.x, self.y, self.z))

    def __eq__(self,other):
        if not isinstance(other, Something):
            return NotImplemented
        return self.x == other.x and self.y == other.y

Выше приведено определение класса. Внутри main:

blah = []

for i in range(5):
    blah.append(Something(i,i+1))

blah[0].z.add(blah[1])

Для этого я получаю ошибку TypeError: unhashable type: 'set'. Одно решение, которое я нашел здесь, было сделать za frozenset(), но это дает AttributeError: 'frozenset' object has no attribute 'add'.

Какие-нибудь предложения?

1 Ответ

0 голосов
/ 07 апреля 2020

Вы должны опустить self.z в вашем методе __hash__.

Поскольку ваш метод __eq__ игнорирует self.z, для __hash__ было бы неправильно учитывать его в любом случае. И это решает проблему того, что self.z является не подлежащим изменению (и изменяемым) типом.

...