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) но мне это не нравится.

Итак, существует ли хороший трюк, который может сделать мою переписывание успешным, не добавляя много сложности кода (метапрограммирование), или я должен просто проглотить таблетку и продолжить "поиск и замена"? :)

Ответы на вопрос(21)

Ваш ответ на вопрос