Хэш Python с if - PullRequest
       33

Хэш Python с if

0 голосов
/ 15 декабря 2018

У меня есть вопрос относительно функции hash (self) Python.

Так что в моем методе у меня есть следующие фрагменты кода

def __init__(self, upper1, lower1, upper2, lower2):
    self.phase = 1
    self.gammas = frozenset()
    self.gammabars = frozenset()

def __hash__(self):
    if self.gammas:
        return hash(self.gammas)
    elif self.gammabars:
        return hash(self.gammabars)

Так что яхочу сказать:

Если self.gammas не пуст, тогда вернуть хэш-значение self.gammas или self.gammabars и т. д.

Но если я сейчас запусту свою программу, я получу:

TypeError: __hash__ method should return an integer

Так вы знаете, как это исправить?

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Использовать хэш метода кортежа:

return hash((self.gammas, self.gammabar))
0 голосов
/ 15 декабря 2018

Когда вы звоните hash(instance), оба ваших self.gammas или self.gammabars не могут быть True.Вы можете попробовать добавить еще один случай:

def __hash__(self):
    if self.gammas:
        return hash(self.gammas)
    elif self.gammabars:
        return hash(self.gammabars)
    else:
        return hash(something)
        # or
        raise ValueError('gammas and gammabars are not valid.')

или отладить свой код, чтобы подтвердить значения self.gammas и self.gammabars.

...