¿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.