Ich habe eine YAML-Datei, die wie folgt aussieht:Objekt kann nicht aus dem Parameter in Konstruktor von PyYAML genannt konstruieren
---
!Frog
name: tree frog
colour: green
friends:
- !Frog
name: motorbike frog
- !Frog
name: blue arrow frog
Und ein Python-Programm, das PyYAML verwendet Objekte erstellen nach der Datei:
import yaml
class Frog():
def __init__(self, name, colour="", friends=None):
self.name = name
self.colour = colour
self.friends = {}
if friends != None:
for f in friends:
self.friends[f.name] = f
print("{}'s friends: {}".format(self.name, self.friends))
# Constructor for YAML
def frogConstructor(loader, node) :
fields = loader.construct_mapping(node)
return Frog(**fields)
yaml.add_constructor('!Frog', frogConstructor)
f = open("frog.yaml")
loaded = yaml.load(f)
Wie Sie im obigen Code sehen können, ich versuche, einen self.friends
Wörterbuch aus dem friends
Parameter zu machen (wo der Schlüssel den Namen des Frosches ist und der Wert ist das tatsächliche Frosch-Objekt) an die __init__
Methode. Jedoch führt der Code oben in der folgenden Ausgabe:
tree frog's friends: {}
motorbike frog's friends: {}
blue arrow frog's friends: {}
Wie Sie sehen können, das self.friends
Wörterbuch für alle drei der Frösche ist leer, aber der Laubfrosch sollte zwei Freunde haben. Wenn ich einfach self.friends = friends
mache, funktioniert es wie erwartet: self.friends
ist eine Liste der Freund Frösche. Was mache ich falsch?