在stackoverflow有一个很精辟的回答解释这两个内置方法的区别,简单来说,__str__方法是表现给使用者使用的,而__repr__方法是给程序员用的。先从一个简单的例子来看看,这两个方法的使用:
class book:
def __init__(self):
pass
def __str__(self):
return '__str__'
def __repr__(self):
return '__repr__'
my_book=book()
print(my_book)
__str__
my_book
Out[13]: __repr__
我们可以简单的看出print方法调用的是__str__,因为这是展现给使用者的,而直接在python的解释器,返回的是__repr__方法。可能这么说还是有些迷糊,更具体的我们可以从python的标准方法datetime看看,一个标准的python对象该如何使用这个方法。
import datetime
today=datetime.date.today()
str(today)
Out[16]: '2018-02-15'
repr(today)
Out[17]: 'datetime.date(2018, 2, 15)'
管中窥豹,str(today)返回的是2018-02-15,我们可以看出来具体的时间,而repr(today)返回的是datetime.date这个方法,显然我们可以直接使用这个方法实例化。