Ich versuche, eine längliche hohle "Daten" Klasse in ein benanntes Tupel zu konvertieren. Meine Klasse sieht derzeit wie folgt aus:
class Node(object):
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
Nach der Umwandlung in namedtuple
sieht es so aus:
from collections import namedtuple
Node = namedtuple('Node', 'val left right')
Doch hier gibt es ein Problem. Meine ursprüngliche Klasse erlaubte mir, nur einen Wert zu übergeben und kümmerte sich um die Standardwerte, indem sie Standardwerte für die benannten Argumente/Schlüsselwörter verwendete. Etwas wie:
class BinaryTree(object):
def __init__(self, val):
self.root = Node(val)
Dies funktioniert jedoch nicht im Fall meines umstrukturierten benannten Tupels, da es erwartet, dass ich alle Felder übergebe. Ich kann natürlich die Vorkommen von Node(val)
a Node(val, None, None)
aber es ist nicht nach meinem Geschmack.
Gibt es also einen guten Trick, mit dem ich meinen Code erfolgreich umschreiben kann, ohne viel Komplexität hinzuzufügen (Metaprogrammierung), oder sollte ich einfach die Pille schlucken und mit dem "Suchen und Ersetzen" weitermachen? :)