__repr__和__str__貌似很类似,执行后都是返回对象的字符串结果,使用时的区别是什么呢?看看标准库datetime的处理方式:
>>> import datetime
>>> today = datetime.date.today()
# str函数调用的是对象的__str__内置函数,其返回值要求清晰易读
>>> str(today)
'2018-02-01'
# repr函数调用的是对象的__repr__内置函数,其返回值要求无歧义,并且往往能被eval再次转换回对应的对象
>>> repr(today)
'datetime.date(2018, 2, 1)'
# 通过eval将字符串'datetime.date(2018,2,1)'再次转换回对应的datetime.date对象(注意结果不是字符串)
>>> eval('datetime.date(2018, 2, 1)')
datetime.date(2018, 2, 1)