"Difference between str and repr in Python"(stackoverflow.com/questions/1… 是 Stack Overflow 上的一个问题。python
在此,笔者将从代码 & 语法两个层次,进行分析。程序员
class Test(object): pass
test = Test()
str(test) # <__main__.Test object at 0x108ff4f28>
repr(test) # <__main__.Test object at 0x108ff4f28>
class Repr(object):
def __repr__(self):
return '__repr__'
r = Repr()
str(r) # '__repr__'
repr(r) # '__repr__'
class Str(object):
def __str__(self):
return '__str__'
s = Str()
str(s) # '__str__'
repr(s) # '<__main__.Str object at 0x109170898>'
复制代码
由以上代码,能够看出来:若是你覆盖了 __repr__ 方法,__str__ 也适用,但反之亦然。bash
repr(object)
返回包含一个对象的可打印表示形式的字符串。
类能够经过定义 __repr__() 方法来控制此函数为它的实例所返回的内容。
object.__repr__(self)
由 repr() 内置函数调用以输出一个对象的'官方'字符串表示。
此方法一般被用于调试。面向程序员
str(object='')
返回 object 的字符串版本。即返回 object.__str__()。
若是 object 没有 __str__ 方法,则返回 repr(object)。
object.__str__(self)
经过 str(object) 以及内置函数 format() 和 print() 的调用,生成一个对象的字符串表示。
返回值必须是字符串对象
内置类型 object 所定义的默认实现会调用 object.__repr__()。
复制代码
由以上可知:函数
若是你只想实现两个特殊方法中的一个,__repr__ 是更好的选择,由于若是一个对象没有 __str__ 函数,而 Python 又须要调用它的时候,解释器会用 __repr__ 做为代替。ui