__repr__() 何时被调用?
当你用 print OBJECT
这个命令时,它会自动调用 OBJECT.__str__()
这个方法。那如果 OBJECT.__str__()
这个方法不存在,OBJECT.__repr__()
又是什么时候被调用的呢?我注意到,当 OBJECT.__str__()
不存在时,print OBJECT
会调用 OBJECT.__repr__()
。不过,我觉得这应该不是调用 __repr__()
的唯一方式。
4 个回答
3
repr(obj)
这个函数会调用 obj.__repr__
。
这个功能的目的是为了清楚地描述一个对象,特别是在调试的时候很有用。更多信息可以查看文档
11
不仅在你使用 repr()
的时候会调用 __repr__()
,还有以下几种情况:
- 你在命令行中输入
obj
然后按下 enter 键。 - 你在打印一个字典、元组或列表里的对象时。例如:
print [u'test']
不会打印出['test']
。
30
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>'
>>>