Supongamos que tengo un namedtuple
así:¿Cómo proporcionar una inicialización adicional para una subclase de namedtuple?
EdgeBase = namedtuple("EdgeBase", "left, right")
Quiero aplicar un hash-función personalizada para esto, así que crear los siguientes subclases:
class Edge(EdgeBase):
def __hash__(self):
return hash(self.left) * hash(self.right)
Puesto que el objeto es inmutable, lo quieren el hash-valor que se calcula sólo una vez, así que hacer 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 de s ubclassing e inicialización en Python, especialmente con tuplas. ¿Hay alguna trampa para esta solución? ¿Hay alguna manera recomendada de cómo hacer esto? ¿Está bien? Gracias por adelantado.
Las pruebas han demostrado que no vale la pena almacenar en caché el valor hash, consulte [número 9685] (https://mail.python.org/pipermail/python-bugs-list/2013- enero/193636.html) –