Como fornecer inicialização adicional para uma subclasse de nomeduplo?
Suponha que eu tenho umnamedtuple
como isso:
EdgeBase = namedtuple("EdgeBase", "left, right")
Quero implementar uma função de hash personalizada para isso, então crio a seguinte subclasse:
class Edge(EdgeBase):
def __hash__(self):
return hash(self.left) * hash(self.right)
Como o objeto é imutável, desejo que o valor do hash seja calculado apenas uma vez, então faço o seguinte:
class Edge(EdgeBase):
def __init__(self, left, right):
self._hash = hash(self.left) * hash(self.right)
def __hash__(self):
return self._hash
Isso parece estar funcionando, mas eu realmente não tenho certeza sobre subclassificação e inicialização em Python, especialmente com tuplas. Existem armadilhas para esta solução? Existe uma maneira recomendada de como fazer isso? Está bom? Desde já, obrigado.