Я пытаюсь преобразовать длинный полый класс "данных" в именованный кортеж. Мой класс выглядит следующим образом:
class Node(object):
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
После преобразования в namedtuple он выглядит так:
from collections import namedtuple
Node = namedtuple('Node', 'val left right')
Но проблема здесь. Мой первоначальный класс позволил мне передать только значение и позаботился о умолчанию, используя значения по умолчанию для аргументов named/keyword. Что-то вроде:
class BinaryTree(object):
def __init__(self, val):
self.root = Node(val)
Но это не работает в случае моего реорганизованного имени tuple, поскольку он ожидает, что я передам все поля. Я могу, конечно, заменить вхождения Node(val) на Node(val, None, None), но мне это не по душе.
Итак, существует ли хороший трюк, который может сделать мою повторную запись успешной без добавления большого количества сложностей кода (метапрограммирование) или просто усвоить таблетку и продолжить поиск и замену?:)