Grundsätzlich habe ich eine API zu www.thetvdb.com in Python geschrieben. Der aktuelle Code kann here gefunden werden.Der beste Weg, um Staffel/Show/Episode Daten zu abstrahieren
Es packt Daten aus der API wie gewünscht, und hat die Daten irgendwie zu speichern und zur Verfügung zu stellen, indem Sie:
print tvdbinstance[1][23]['episodename'] # get the name of episode 23 of season 1
Was ist die „beste“ Art und Weise zu abstrahieren diesen Daten innerhalb der Tvdb()
Klasse ?
habe ich ursprünglich einen erweiterten Dict()
, die automatisch Unter dicts erstellt (so könnte man x[1][2][3][4] = "something"
tun, ohne if x[1].has_key(2): x[1][2] = []
zu tun zu haben, und so weiter)
Dann habe ich die Daten nur gespeichert, indem self.data[show_id][season_number][episode_number][attribute_name] = "something"
tun Dies funktionierte Okay, aber es gab keine einfache Möglichkeit zu überprüfen, ob x[3][24]
existieren sollte oder nicht (so konnte ich die season_not_found-Ausnahme nicht auslösen).
es derzeit mit vier Klassen: ShowContainer
, Show
, Season
und Episode
. Jedes ist ein sehr grundlegendes Diktat, dem ich leicht zusätzliche Funktionalität hinzufügen kann (die search()
Funktion auf Show()
zum Beispiel). Jeder hat eine __setitem__
, __getitem_
und has_key
.
Das funktioniert vor allem gut, ich kann einchecken, wenn es diese Saison hat, ist es self.data
dict, wenn nicht, raise season_not_found
. Ich kann auch einchecken Season()
, wenn es diese Episode hat und so weiter.
Das Problem jetzt ist es, sich als dict ist präsentiert, aber nicht über alle Funktionen, und weil ich die __getitem__
und __setitem__
Funktionen überschreiben bin, ist es einfach __getitem__
versehentlich rekursiv zu nennen (so bin ich nicht sicher wenn die Erweiterung Dict
Klasse Probleme verursacht).
Das andere kleine Problem ist das Hinzufügen von Daten in das Diktat ist viel mehr Arbeit als die alte Dict
Methode (die war). Siehe _setItem
und _setData
. Es ist nicht so schlimm, da es derzeit nur eine schreibgeschützte API-Schnittstelle ist (also sollten die Benutzer der API nur Daten abrufen, nicht mehr hinzufügen), aber es ist kaum ... Elegant.
Ich denke, die Serie von Klassen-System ist wahrscheinlich der beste Weg, aber hat jemand eine bessere Idee für die Speicherung der Daten? Und würde die Erweiterung der ShowContainer
/etc Klassen mit Dict
Probleme verursachen?