Supponiamo che io sono un namedtuple
come questo:Come fornire un'inizializzazione aggiuntiva per una sottoclasse di namedtuple?
EdgeBase = namedtuple("EdgeBase", "left, right")
Voglio realizzare un hash-funzione personalizzata per questo, quindi creo il seguente sottoclasse:
class Edge(EdgeBase):
def __hash__(self):
return hash(self.left) * hash(self.right)
Poiché l'oggetto è immutabile, io vuole l'hash-valore da calcolare solo una volta, in modo da fare questo:
class Edge(EdgeBase):
def __init__(self, left, right):
self._hash = hash(self.left) * hash(self.right)
def __hash__(self):
return self._hash
questo sembra funzionare, ma non sono davvero sicuro di s ubclassing e inizializzazione in Python, specialmente con le tuple. Ci sono delle insidie a questa soluzione? C'è un modo consigliato come fare questo? Va bene? Grazie in anticipo.
I test hanno dimostrato che non vale la pena memorizzare il valore hash, vedere [numero 9685] (https://mail.python.org/pipermail/python-bugs-list/2013-January/192363.html) –