print OBJECT
вызывает OBJECT.__str__()
, тогда, когда вызывается OBJECT.__repr__()
? Я вижу, что print OBJECT
вызывает OBJECT.__repr__()
, когда OBJECT.__str__()
не существует, но я ожидаю, что не единственный способ вызвать __repr__()
.
Когда вызывается __repr __()?
Ответ 1
repr(obj)
вызовы
obj.__repr__
цель __repr__
заключается в том, что она обеспечивает "формальное" представление объекта, который должен быть выражением, которое может быть eval
ed для создания объекта. то есть
obj == eval(repr(obj))
должен, но не всегда на практике, дает True
В комментариях мне было предложено указать пример obj != eval(repr(obj))
.
class BrokenRepr(object):
def __repr__(self):
return "not likely"
здесь другой:
>>> con = sqlite3.connect(':memory:')
>>> repr(con)
'<sqlite3.Connection object at 0xb773b520>'
>>>
Ответ 2
Вызывается не только __repr__()
при использовании repr()
, но также в следующих случаях:
- В командной строке введите
obj
и нажмите enter - Вы когда-либо печатали объект в словаре /tuple/list. Например:
print [u'test']
не печатает['test']
Ответ 3
repr(obj)
вызывает obj.__repr__
.
Это предназначено для четкого описания объекта, особенно для целей отладки. Дополнительная информация в документах
Ответ 4
В python 2.x, `` `obj `` will end up calling
obj. repr() . It shorthand for
repr()`.