namedtuple und Standardwerte für optionale Schlüsselwortargumente

Ich versuche zu konvertieren, einem länglichen hohlen "data" - Klasse in eine benannte Tupel. Meine Klasse sieht derzeit ungefähr so aus:

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

Nach der Konvertierung zu namedtuple sieht es so aus:

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

Aber es gibt ein problem hier. Meine ursprüngliche Klasse erlaubt, mich zu übergeben, nur einen Wert und kümmerte sich um den Standard durch die Verwendung von default-Werten für die namens - /keyword-Argumente. So etwas wie:

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

Aber das funktioniert nicht, in dem Fall von meinem umgestalteten benannte Tupel, da es von mir, dass pass alle Felder aus. Ich kann natürlich ersetzen die vorkommen von Node(val) zu Node(val, None, None) aber es ist nicht nach meinem Geschmack.

So gibt es einen guten trick, die machen meine re-write successful ohne Zugabe eine Menge von code-Komplexität (metaprogramming) oder sollte ich einfach schlucken Sie die Pille und gehen Sie mit der "suchen und ersetzen"? 🙂

InformationsquelleAutor der Frage sasuke | 2012-07-05

Schreibe einen Kommentar