Я пытаюсь преобразовать длинный полый класс данных в именованный кортеж. Мой класс в настоящее время выглядит так:
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)
Но это не работает в случае моего рефакторированного именованного кортежа, так как он ожидает, что я пропущу все поля. Я могу, конечно , заменить вхождения Node(val)
в Node(val, None, None)
но это мне не нравится.
Так есть ли хороший трюк, который может сделать мою переписывание успешным, не добавляя много сложностей кода (метапрограммирование), или я должен просто проглотить таблетку и продолжить поиск и замену? :)
Node
и другие классы являются простыми объектами значений держателя данных с кучей различных полей ( Node
это только одно из них). Эти объявления классов - не более чем линейный шум, поэтому ИМХО хотел их обрезать. Зачем поддерживать то, что не требуется? :)
.debug_print()
метода, который прогуливается по дереву и печатает его?
BinaryTree
класса. Node
и другие держатели данных не требуют таких специальных методов особ , учитывая , что названные кортежи имеют порядочный __str__
и __repr__
представление. :)
Node
класс просто так, как он есть. Зачем конвертировать в именованный кортеж?