Persistente Objekte und __repr__
-
29-09-2019 - |
Frage
Was wäre der beste Weg, um die __repr__()
Funktion für ein Objekt zu behandeln, die persistent gemacht wird? Beispielsweise eine, die eine Reihe in einer Datenbank repräsentiert (relational oder Objekt).
Nach Python-Dokumentation, __repr__()
sollte einen String zurück, den das Objekt mit eval()
, so dass (grob) eval(repr(obj)) == obj
oder Klammer-Notation für ungenaue Darstellungen neu erstellen würde. Normalerweise würde dies bedeuten, alle Daten Dumping, die nicht durch das Objekt in den String regeneriert werden. Doch für persistente Objekte das Objekt neu zu erstellen könnte so einfach sein, die Daten aus der Datenbank als abgerufen werden.
Also, für solche Objekte dann alle Objektdaten oder nur die Primärschlüssel in dem __repr__()
String?
Lösung
repr sollte einen String zurückgeben, würde neu erstellen, das Objekt mit eval
Ist das legal für einfache Typen wie int oder String oder Schwimmer, aber nicht verwendbar für mehrspaltige DB-Objekt mit etwa 15+ Spalten
Zum Beispiel, wenn ich eine Klasse darstellt Preis hätte, wäre es sinnvoll sein, die __repr__
zu machen die wichtigsten Merkmale der es zeigen: Betrag und Währung
def __repr__(self):
return '%s %s'%(self.amount,self.currency)
Andere Tipps
Wie es aus der Datenbank zu erhalten, ist uninteressant im Allgemeinen. Bringen Sie die Möglichkeit, das Objekt von Grund auf neu zu erstellen, z.B. SomeModel(field1, field2, ...)
.