一般来说,通常这样解释: __str__
是面向用户的,而__repr__
面向程序员。可是对初学者来说,这样还是比较难理解。
他们的主要区别是什么呢?
str其实相当于将类字符化;repr这是返回当前类得表达是字符串形式。也就是说,str返回的东西是直接使用print打印输出的,相当于toString的内容,而repr是用来生成可以通过eval函数执行的将类序列化的表达式。也正因为如此,所以说Str是面向用户的,因为他只是打印出来看的。而repr是面向开发的,因为他的返回实质上是类的代码。
[26]: class Test:
...:
...: def __str__(self):
...: return 'class is Test'
...: def __init__(self):
...: pass
...:
...: def __repr__(self):
...: return 'Test()'
...:
In [27]: t=Test()
In [28]: print(t)
class is Test
In [29]: eval(repr(t))
Out[29]: Test()
In [30]:
打个不太恰当的比方来说, str函数有点相当于你现实的表现,而 repr函数,相当于你的DNA,用来克隆你的副本。