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