The difference between __str__ and __repr__?
我写这个代码:
1 2 3 4 5
| class Item:
def __init__(self, name):
self._name = name;
def __str__(self):
return"Item: %s" % self._name |
当我奔跑
输出是
1
| (<__main__.Item object at 0x0000000002D32400>,) |
当我将代码更改为:
1 2 3 4 5 6 7
| class Item:
def __init__(self, name):
self._name = name;
def __repr__(self):
return"Item: %s" % self._name
def __str__(self):
return"Item: %s" % self._name |
然后输出
所以现在我对__repr__和__str__之间的区别感到困惑。
__str__和__repr__都是获取对象字符串表示的方法。__str__应该更短、更用户友好,而__repr__应该提供更多细节。
具体来说,对于许多数据类型,__repr__返回一个字符串,如果将其粘贴回python中,该字符串将是一个有效表达式,其值将等于原始值。例如,str('Hello')返回'Hello',而repr('Hello')返回"'Hello'",字符串中带有引号。如果你把这个字符串打印出来,你会得到'Hello',如果你把它粘贴回python,你会得到原来的字符串。
某些数据类型(如文件对象)无法通过这种方式转换为字符串。这些对象的__repr__方法通常返回一个尖括号中的字符串,其中包括对象的数据类型和内存地址。如果不专门定义__repr__方法,用户定义的类也会这样做。
在repl中计算值时,python调用__repr__将其转换为字符串。但是,当使用print时,python调用__str__。
调用print((Item("Car"),))时,调用tuple类的__str__方法,与它的__repr__方法相同。该方法的工作原理是调用tuple中每个项的__repr__方法,将它们与逗号(加上一个项目tuple的尾随方法)连接在一起,并用括号包围整个过程。我不知道为什么tuple的__str__方法在其内容上不调用__str__,但它没有。
- 我在拍它!参考2:docs.python.org)/ / / datamodel.html # _ _ repr _ _对象。
- 我让你拍它为好!然而,这将是有用的__repr__to add a注意通常是预期的一个语句,将复制的对象。从文档:"这应该看起来像一个有效的Python表达式可以被用来recreate对象有相同的价值。
- 我意识到我完全错过了和实际点的问题。固定。
- 一个小例子:from datetime import datetime as dt; dt.today().__str__(); dt.today().__repr__()