为什么在下面的代码中调用__repr__?

时间:2017-07-27 21:09:03

标签: python

有人可以帮助我,为什么在下面的代码中使用__repr__方法调用q.pop()方法?

>>> class Item:
...     def __init__(self, name):
...         self.name = name
...     def __repr__(self):
...         return 'Item({!r})'.format(self.name)
...
>>> q = PriorityQueue()
>>> q.push(Item('foo'), 1)
>>> q.push(Item('bar'), 5)
>>> q.push(Item('spam'), 4)
>>> q.push(Item('grok'), 1)
>>> q.pop()
Item('bar')
>>> q.pop()
Item('spam')
>>> q.pop()
Item('foo')
>>> q.pop()
Item('grok') 
>>>

1 个答案:

答案 0 :(得分:3)

内置__repr__函数用于返回对象的可打印格式。在这种情况下,因为Item是自定义对象/类,__repr__中的覆盖允许Item的实例显示在终端中。查看他们何时致电q.pop(),该项目将打印到屏幕上,并且此打印是通过覆盖__repr__功能完成的。

q.pop()打印Item('bar'),因为__repr__的被覆盖Item函数表示打印'Item({!r})'.format(self.name)。这会打印单词:Item(''),格式部分会在单引号之间填充项目的实际内容,从而导致Item('bar')被打印到屏幕上。

在这里阅读更多相关信息: Purpose of Python's __repr__