持久对象和__repr__

时间:2010-11-09 08:37:26

标签: python persistence repr

对于持久化的对象,处理__repr__()函数的最佳方法是什么?例如,一个表示数据库中的行(关系或对象)。

根据Python文档,__repr__()应返回一个字符串,该字符串将使用eval()重新创建对象,使(大致)eval(repr(obj)) == obj或不精确表示的括号表示法。通常这意味着将对象无法重新生成的所有数据转储到字符串中。但是,对于持久对象,重新创建对象可能就像从数据库中检索数据一样简单。

那么,对于这样的对象,那么,所有对象数据还是__repr__()字符串中的主键?

2 个答案:

答案 0 :(得分:1)

  

repr应该返回一个字符串   使用eval重新创建对象

对于像int或string或float这样的简单类型来说这是合法的,但是对于多列数据库对象(例如15列以上)不可用

例如,如果我有一个代表价格的类,那么__repr__显示它的主要特征是合理的:金额和货币

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

答案 1 :(得分:0)

如何从数据库中获取它通常是无趣的。返回从头开始重新创建对象的方法,例如SomeModel(field1, field2, ...)