__repr__() 何时被调用?

22 投票
4 回答
15091 浏览
提问于 2025-04-16 04:26

当你用 print OBJECT 这个命令时,它会自动调用 OBJECT.__str__() 这个方法。那如果 OBJECT.__str__() 这个方法不存在,OBJECT.__repr__() 又是什么时候被调用的呢?我注意到,当 OBJECT.__str__() 不存在时,print OBJECT 会调用 OBJECT.__repr__()。不过,我觉得这应该不是调用 __repr__() 的唯一方式。

4 个回答

3

repr(obj) 这个函数会调用 obj.__repr__

这个功能的目的是为了清楚地描述一个对象,特别是在调试的时候很有用。更多信息可以查看文档

11

不仅在你使用 repr() 的时候会调用 __repr__(),还有以下几种情况:

  1. 你在命令行中输入 obj 然后按下 enter 键。
  2. 你在打印一个字典、元组或列表里的对象时。例如: 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>'
>>> 

撰写回答