Sto provando a convertire una classe "dati" vuota longish in una tupla con nome. La mia classe attualmente si presenta così:
class Node(object):
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
Dopo la conversione namedtuple
sembra:
from collections import namedtuple
Node = namedtuple('Node', 'val left right')
Ma c'è un problema qui. La mia classe originale mi ha permesso di passare solo un valore e si è preso cura del valore predefinito usando i valori predefiniti per gli argomenti nominati / parola chiave. Qualcosa di simile a:
class BinaryTree(object):
def __init__(self, val):
self.root = Node(val)
Ma questo non funziona nel caso della mia tupla di nome refactored poiché mi aspetta che passi tutti i campi. Posso sostituire, naturalmente, le occorrenze di Node(val)
a Node(val, None, None)
, ma non è di mio gradimento.
Quindi esiste un buon trucco che può rendere la mia riscrittura riuscita senza aggiungere molta complessità al codice (metaprogrammazione) o dovrei semplicemente ingoiare la pillola e procedere con la "ricerca e sostituzione"? :)
Node
classe corrente e le altre classi sono semplici oggetti valore titolare di dati con un mucchio di campi diversi ( Node
è solo uno di questi). Queste dichiarazioni di classe non sono altro che un rumore di linea che IMHO ha quindi voluto eliminare. Perché mantenere qualcosa che non è richiesto? :)
.debug_print()
metodo che cammina l'albero e lo stampa?
BinaryTree
classe. Node
e altri detentori di dati non richiedono metodi così speciali, specialmente se le tuple nominate hanno un aspetto decente __str__
e __repr__
rappresentativo. :)
Node
lezione originale così com'è. Perché convertire in tupla nominata?