Domanda

Quale sarebbe il modo migliore per gestire la funzione __repr__() per un oggetto che è fatto insistente? Ad esempio, uno che sta rappresentando una riga in un database (relazionale o oggetto).

Secondo documenti Python, __repr__() dovrebbe restituire una stringa che ricreare l'oggetto con eval() tale che (approssimativamente) eval(repr(obj)) == obj, o notazione staffa per rappresentazioni inesatte. Solitamente questo significherebbe scarico tutti i dati che non possono essere rigenerati dall'oggetto nella stringa. Tuttavia, per gli oggetti persistenti ricreando l'oggetto potrebbe essere semplice come il recupero dei dati dal database.

Quindi, per tali oggetti, allora, tutti i dati degli oggetti o solo la chiave primaria nella stringa __repr__()?

È stato utile?

Soluzione

  

repr dovrebbe restituire una stringa che avrebbe   ri-creare l'oggetto con eval

Questo è legale per i tipi semplici come int o stringa o galleggiante, ma non utilizzabile per più colonne oggetto DB con dire 15+ colonne

Per esempio, se ho avuto una fascia di prezzo che rappresenta, sarebbe ragionevole per rendere il __repr__ mostrare le principali caratteristiche di esso: importo e la valuta

def __repr__(self):
   return '%s %s'%(self.amount,self.currency)

Altri suggerimenti

Come ottenere dal database è generalmente poco interessante. Restituire il modo per ricreare l'oggetto da zero, ad esempio SomeModel(field1, field2, ...).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top