Estoy tratando de convertir una clase de "datos" hueca alargada en una tupla con nombre. Mi clase actualmente se ve así:
class Node(object):
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
Después de la conversión namedtuple
se ve así:
from collections import namedtuple
Node = namedtuple('Node', 'val left right')
Pero hay un problema aquí. Mi clase original me permitió pasar solo un valor y se encargó del valor predeterminado mediante el uso de valores predeterminados para los argumentos con nombre / palabra clave. Algo como:
class BinaryTree(object):
def __init__(self, val):
self.root = Node(val)
Pero esto no funciona en el caso de mi tupla refactorizada, ya que espera que pase todos los campos. Por supuesto, puedo reemplazar las ocurrencias de Node(val)
to Node(val, None, None)
pero no es de mi agrado.
Entonces, ¿existe un buen truco que pueda hacer que mi reescritura sea exitosa sin agregar mucha complejidad de código (metaprogramación) o debería simplemente tragarme la píldora y continuar con la "búsqueda y reemplazo"? :)
Node
clases actuales y otras son simples objetos de valor de titular de datos con un montón de campos diferentes ( Node
es solo uno de ellos). Estas declaraciones de clase no son más que ruido de línea en mi humilde opinión, por lo que quería recortarlas. ¿Por qué mantener algo que no se requiere? :)
.debug_print()
método que recorra el árbol y lo imprima?
BinaryTree
clase. Node
y otros titulares de los datos no requieren este tipo de métodos especiales especialmente teniendo en cuenta que el nombre tuplas tienen una decente __str__
y __repr__
la representación. :)
Node
clase original tal como es. ¿Por qué convertir a tupla nombrada?