Предположим, у меня есть namedtuple
примерно так:
EdgeBase = namedtuple("EdgeBase", "left, right")
Я хочу реализовать для этого собственную хеш-функцию, поэтому я создаю следующий подкласс:
class Edge(EdgeBase):
def __hash__(self):
return hash(self.left) * hash(self.right)
Поскольку объект неизменный, я хочу, чтобы хеш-значение вычислялось только однажды, поэтому я делаю это:
class Edge(EdgeBase):
def __init__(self, left, right):
self._hash = hash(self.left) * hash(self.right)
def __hash__(self):
return self._hash
Кажется, это работает, но я действительно не уверен насчет подклассов и инициализации в Python, особенно с кортежами. Есть ли подводные камни в этом решении? Есть ли рекомендуемый способ, как это сделать? Это нормально? Заранее спасибо.