当调用__repr __()时?

时间:2010-09-21 20:48:23

标签: python

print OBJECT调用OBJECT.__str__(),然后调用OBJECT.__repr__()时?我看到print OBJECTOBJECT.__repr__()不存在时调用OBJECT.__str__(),但我认为这不是调用__repr__()的唯一方法。

4 个答案:

答案 0 :(得分:21)

repr(obj)

呼叫

obj.__repr__

__repr__的目的是它提供对象的“正式”表示,该表示应该是eval来创建对象的表达式。就是这样,

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>'
>>> 

答案 1 :(得分:7)

使用__repr__()时,repr()不仅会被调用,而且在以下情况下也会被调用:

  1. 您在shell中输入obj,然后按输入
  2. 您曾在字典/元组/列表中打印对象。例如:print [u'test']不打印['test']

答案 2 :(得分:3)

repr(obj)来电obj.__repr__

这是为了清楚地描述一个对象,特别是为了调试目的。 More info in the docs

答案 3 :(得分:1)

在python 2.x中,```obj `` will end up calling obj。 repr (). It's shorthand for repr()`。