У меня есть некоторые переменные, которые связаны два на два, и я хочу хранить их как атрибуты объектов Siblings ().Итак, я создаю класс:
def Siblings(object):
def __init__(self, brother, sister):
self._brother = brother
self._sister = sister
def __eq__(self, other):
if isinstance(other, Siblings):
return {self._brother, self._sister} == {other._brother, other._sister}
def __hash__(self):
return hash((self._brother, self._sister)
Причина, по которой я использую наборы в eq , заключается в том, что я не знаю (и мне все равно), какая переменная будет считаться братоми который как сестра.На самом деле,
s1 = Siblings(1,2)
s2 = Siblings(2,1)
print(s1 == s2)
печатает True, что мне и нужно.Проблема состоит в том, что мои объекты Siblings () должны использоваться как словарные ключи, так что упомянутые выше s1 и s2 соответствуют одному и тому же ключу.Однако:
a = {s1: 5}
a[s2] = 4
не изменяет значение 5, как я хочу, а вместо этого добавляет новую пару ключ-значение.Это понятно по определению моего хеша .
Я попытался заменить вектор на набор из хеша , но я получил TypeError: unhashable type: 'задавать'.Любые предложения о том, как решить эту проблему?