Постоянные объекты и __repr__ - PullRequest
2 голосов
/ 09 ноября 2010

Каков наилучший способ обработки функции __repr__() для объекта, который сделан постоянным? Например, тот, который представляет строку в базе данных (реляционную или объектную).

Согласно документации Python, __repr__() должен возвращать строку, которая воссоздает объект с eval(), такой, что (примерно) eval(repr(obj)) == obj, или нотацию в скобках для неточных представлений. Обычно это означает сброс в строку всех данных, которые не могут быть восстановлены объектом. Однако для постоянных объектов воссоздание объекта может быть таким же простым, как получение данных из базы данных.

Итак, для таких объектов все данные объекта или только первичный ключ в строке __repr__()?

Ответы [ 2 ]

1 голос
/ 09 ноября 2010

repr должен вернуть строку, которая пересоздать объект с помощью eval

Это допустимо для простых типов, таких как int, string или float, но не может использоваться для объекта с несколькими столбцами DB, скажем, 15+ столбцов

Например, если бы у меня был класс, представляющий цену, было бы разумно, чтобы __repr__ показывал его основные характеристики: сумму и валюту

def __repr__(self):
   return '%s %s'%(self.amount,self.currency)
0 голосов
/ 09 ноября 2010

Как получить его из базы данных вообще неинтересно.Верните способ воссоздать объект с нуля, например SomeModel(field1, field2, ...).

...