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.

questionAnswers(3)

yourAnswerToTheQuestion