namedtuple e valores padrão para argumentos de palavras-chave opcionais
Estou tentando converter uma classe de dados "oca" longa em uma tupla nomeada. Minha turma atualmente se parece com isso:
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 paranamedtuple
parece que:
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 nomeados / chave. Algo como:
class BinaryTree(object):
def __init__(self, val):
self.root = Node(val)
Mas isso não funciona no caso da minha tupla denominada refatorada, pois espera que eu passe por todos os campos. Posso, naturalmente, substituir as ocorrências deNode(val)
paraNode(val, None, None)
mas não é do meu agrado.
Então, existe um bom truque que pode tornar minha reescrita bem-sucedida sem adicionar muita complexidade de código (metaprogramação) ou devo simplesmente engolir a pílula e prosseguir com a "busca e substituição"? :)