Estou tentando converter uma classe "data" oca longa em uma tupla nomeada. Atualmente, minha turma tem a seguinte aparência:
class Node(object):
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
Após a conversão, namedtuple
ele se parece com:
from collections import namedtuple
Node = namedtuple('Node', 'val left right')
Mas há um problema aqui. Minha classe original me permitiu passar apenas um valor e cuidou do padrão usando valores padrão para os argumentos nomeado / palavra-chave. Algo como:
class BinaryTree(object):
def __init__(self, val):
self.root = Node(val)
Mas isso não funciona no caso da minha tupla nomeada refatorada, pois espera que eu passe por todos os campos. É claro que posso substituir as ocorrências de Node(val)
to, Node(val, None, None)
mas não é do meu agrado.
Existe um bom truque que pode tornar minha reescrita bem-sucedida sem adicionar muita complexidade de código (metaprogramação) ou devo apenas engolir a pílula e prosseguir com a "pesquisa e substituição"? :)
Node
classes atuais e outras são simples objetos de valor do detentor de dados com vários campos diferentes ( Node
é apenas um deles). Essas declarações de classe nada mais são do que o ruído da linha IMHO, portanto, queria apará-las. Por que manter algo que não é necessário? :)
.debug_print()
método que anda na árvore e a imprime?
BinaryTree
classe. Node
e outros titulares de dados não exigem métodos especiais, especialmente porque as tuplas nomeadas têm uma representação __str__
e um valor decente __repr__
. :)
Node
classe original do jeito que está. Por que converter em tupla nomeada?