¿Cómo proporcionar una inicialización adicional para una subclase de namedtuple?

Supongamos que tengo unnamedtuple Me gusta esto:

EdgeBase = namedtuple("EdgeBase", "left, right")

Quiero implementar una función hash personalizada para esto, así que creo la siguiente subclase:

class Edge(EdgeBase):
    def __hash__(self):
        return hash(self.left) * hash(self.right)

Como el objeto es inmutable, quiero que el valor hash se calcule solo una vez, así que hago esto:

class Edge(EdgeBase):
    def __init__(self, left, right):
        self._hash = hash(self.left) * hash(self.right)

    def __hash__(self):
        return self._hash

Esto parece estar funcionando, pero realmente no estoy seguro acerca de la subclase e inicialización en Python, especialmente con las tuplas. ¿Hay alguna dificultad para esta solución? ¿Hay alguna forma recomendada de cómo hacer esto? ¿Está bien? Gracias por adelantado.

Respuestas a la pregunta(3)

Su respuesta a la pregunta