Ich erstelle ein Wörterbuch von Objekten, die ich zu einem anderen Zeitpunkt speichern und erneut laden möchte (ich möchte dies mit dem "json" -Modul tun, nicht " Essiggurke").__dict__ Erlaube Call to Method in Python nicht
Ich habe eine Klasse erstellt (nennen wir es "Ball"), und das Wörterbuch enthält nur viele verschiedene Instanzen dieser Klasse. So wie es aussieht, ist:
my_dict = {
"ball1": {"size": "big", "baseball": False, etc...},
"ball2": {"size": "small", "baseball": True, etc...},
etc...
}
Wie ich neue Instanzen der „Ball“ Klasse erstellen, ich APPEND sie nur auf „my_dict“.
Mein „Ball“ Klasse hat Methoden, die mir erlauben, den Wert bestimmter Felder zu ändern ... das heißt:
changeSize(self, size)
PROBLEM:
Um für mich, die sparen Fähigkeit, an die Arbeit
newBall = Ball(name)
my_dict[name] = newBall.__dict__
Hinzufügen des
: richtig mit dem json-Modul ich habe folgendes auf jede neue Instanz der „Ball“ Klasse zu tun hatteund dann anhängen an das Wörterbuch macht es JSON serialisierbar, aber es macht es so, dass, wenn ich in "Bearbeitungsmodus" gehe ich kann die Methode nicht aufrufen (dh changeSize (Name)), weil es gerade ist ein Wörterbuch und nicht mehr ein "Ball" -Objekt.
Wie mache ich es so, dass ich speichern kann (mit JSON-Modul) und auch die Methoden, die ich habe, zu bearbeiten?
Auch die Art, wie ich bin Speichern/Laden wird wie folgt:
out_file = open("testSave.json"), "w")
json.dump(my_dict, out_file, indent=4)
out_file.close()
in_file = open("testSave.json", "r")
my_dict = json.load(in_file)
in_file.close()
Dank!
Der 'Ball'-Konstruktor benötigt mindestens einen Namen (aber es wird im Programm aufgefordert, damit es passiert). Willst du damit sagen, dass ich im Prinzip dasselbe mache, was ich bereits mit "Pickle" gemacht habe, dass es funktionieren würde? Ich weiß, dass es weniger sicher ist, und deshalb habe ich versucht, den JSon-Weg zu lernen. Auch, wenn ich mit "Json" fortfahre, könnten Sie mir eine schnelle Erklärung geben, warum Sie einen 'Dekorateur' verwenden? Ich habe kein großes Verständnis von ihnen. Danke vielmals! – AmericanMade
@AmericanMade - Sie könnten 'b = cls (dictionary.get ('name'))' oder etwas ähnliches tun. Re: 'pickle' - Es gibt definitiv Sicherheitsprobleme dort. Nimm niemals etwas auf, wenn du es nicht komplett vertraust. Was das '@ classmethod' betrifft, so macht es das nur so, dass das in' from_json', 'cls' die _class_ ist und keine Instanz der Klasse. – mgilson