namedtuple i wartości domyślne dla opcjonalnych argumentów słów kluczowych

Próbuję przekonwertować długotrwałą pustą klasę „data” na nazwaną krotkę. Moja klasa wygląda obecnie tak:

class Node(object):
    def __init__(self, val, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

Po konwersji nanamedtuple to wygląda jak:

from collections import namedtuple
Node = namedtuple('Node', 'val left right')

Ale tutaj jest problem. Moja oryginalna klasa pozwoliła mi przekazać tylko wartość i zadbałem o domyślne użycie domyślnych wartości dla nazwanych argumentów / słów kluczowych. Coś jak:

class BinaryTree(object):
    def __init__(self, val):
        self.root = Node(val)

Ale to nie działa w przypadku mojej refactored nazwanej krotki, ponieważ oczekuje, że przejdę wszystkie pola. Mogę oczywiście zastąpić wystąpieniaNode(val) doNode(val, None, None) ale to mi się nie podoba.

Czy istnieje więc dobra sztuczka, która może sprawić, że moje ponowne napisanie zakończy się sukcesem bez dodawania dużej złożoności kodu (metaprogramowanie), czy też powinienem po prostu połknąć pigułkę i przejść do „wyszukiwania i zastępowania”? :)

questionAnswers(21)

yourAnswerToTheQuestion