python官网文档
object.repr(self)
由 repr() 内置函数调用以输出一个对象的“官方”字符串表示。如果可能,这应类似一个有效的 Python 表达式,能被用来重建具有相同取值的对象(只要有适当的环境)。如果这不可能,则应返回形式如 <…some useful description…> 的字符串。返回值必须是一个字符串对象。如果一个类定义了 repr() 但未定义 str(),则在需要该类的实例的“非正式”字符串表示时也会使用 repr()。
此方法通常被用于调试,因此确保其表示的内容包含丰富信息且无歧义是很重要的。
object.str(self)
通过 str(object) 以及内置函数 format() 和 print() 调用以生成一个对象的“非正式”或格式良好的字符串表示。返回值必须为一个 字符串 对象。
此方法与 object.repr() 的不同点在于 str() 并不预期返回一个有效的 Python 表达式:可以使用更方便或更准确的描述信息。
内置类型 object 所定义的默认实现会调用 object.repr()。
自己的理解
1.str__会在实例被当作str类型使用的时候被调用,直接查看对象时__repr__被调用。
2.我们也可以使用内置的 str() 或 repr() 方法,它们会调用类中对应的双下划线方法,直接调用__str*或 repr 方法也可以。
3.str 更容易理解,便于人们阅读,必须返回一个字符串对象(没有验证),__repr__返回结果更加准确,目的是调试,如果可以尽可能返回,相同环境下重建具有相同取值的对象的表达式,如果不能满足返回一些有用信息的字符串也可以。
4.当需要调用__str__时,str__没有被定义则会调用用__repr,而需要调用__repr__时不会调用
str,因此repr可以代替str,所以每个类最好有一个repr函数。这样能保证始终类到字符串有一个有效的自定义转换方式。
5.列表以及字典等容器总是会使用 repr 方法。即使你显式的调用 str 方法,也是如此。