2010-11-09 16 views
2

Quelle serait la meilleure façon de gérer la fonction __repr__() pour un objet rendu persistant? Par exemple, celui qui représente une ligne dans une base de données (relationnelle ou objet).Objets persistants et __repr__

Selon docs Python, __repr__() doit retourner une chaîne qui recréer l'objet avec eval() tel que (à peu près) eval(repr(obj)) == obj ou notation de support pour les représentations inexactes. Cela signifie généralement que toutes les données qui ne peuvent pas être régénérées par l'objet dans la chaîne sont vidées. Toutefois, pour les objets persistants recréer l'objet pourrait être aussi simple que de récupérer les données de la base de données. Donc, pour ces objets, toutes les données d'objet ou seulement la clé primaire dans la chaîne __repr__()?

Répondre

1

rééd doit retourner une chaîne qui recréez l'objet avec eval

C'est légal pour les types simples comme int ou ficelle ou flottant, mais pas utilisable pour objet DB multi-colonnes avec dire 15+ colonnes

Par exemple, si j'avais un prix représentant la classe, il serait raisonnable de faire le __repr__ montrent les principales caractéristiques de celui-ci: montant et la devise

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

Comment l'obtenir de la base de données est généralement inintéressant. Retournez le chemin pour recréer l'objet à partir de zéro, par ex. SomeModel(field1, field2, ...).