399 Stimmen

Benanntes Tupel und Standardwerte für optionale Schlüsselwortargumente

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? :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X