Предположим, что у меня есть 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, особенно с кортежами. Есть ли подводные камни для этого решения? Есть ли способ, как это сделать? Это нормально? Спасибо заранее.