nombrados como valores predeterminados y de tupla para argumentos de palabras clave opcionales

Estoy tratando de convertir una clase de "datos" huecos 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 anamedtuple parece que:

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 hizo cargo del valor predeterminado utilizando valores predeterminados para los argumentos nombrados / palabras clave. Algo como:

class BinaryTree(object):
    def __init__(self, val):
        self.root = Node(val)

Pero esto no funciona en el caso de mi tupla nombrada refactorizada, ya que espera que pase todos los campos. Por supuesto puedo reemplazar las ocurrencias deNode(val) aNode(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 debo tragar la píldora y seguir adelante con la "búsqueda y reemplazo"? :)

Respuestas a la pregunta(21)

Su respuesta a la pregunta