Я пытаюсь преобразовать длинный полый класс "данных" в именованный кортеж. Мой класс выглядит следующим образом:
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)
, но мне это не по душе.
Итак, существует ли хороший трюк, который может сделать мою повторную запись успешной без добавления большого количества сложностей кода (метапрограммирование) или просто усвоить таблетку и продолжить поиск и замену?:)