当调用__repr __()时?

pro*_*eek 13 python

print OBJECT打电话OBJECT.__str__(),然后什么时候OBJECT.__repr__()打电话?我看到,print OBJECT调用OBJECT.__repr__()OBJECT.__str__()不存在,但我希望这不是调用的唯一途径__repr__().

aar*_*ing 21

repr(obj)
Run Code Online (Sandbox Code Playgroud)

电话

obj.__repr__
Run Code Online (Sandbox Code Playgroud)

其目的__repr__是提供对象的"正式"表示,该表示应该是可以eval创建对象的表达式.那是,

obj == eval(repr(obj))
Run Code Online (Sandbox Code Playgroud)

应该,但并不总是在实践中,屈服True

我在评论中被问到一个何时的例子obj != eval(repr(obj)).

class BrokenRepr(object):
    def __repr__(self):
        return "not likely"
Run Code Online (Sandbox Code Playgroud)

这是另一个:

>>> con = sqlite3.connect(':memory:')
>>> repr(con)
'<sqlite3.Connection object at 0xb773b520>'
>>> 
Run Code Online (Sandbox Code Playgroud)


Mik*_*iak 8

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

  1. 您键入objshell并按enter
  2. 您曾经在字典/元组/列表中打印对象.例如:print [u'test']不打印['test']