解释Python中的str()与repr()函数

官方Python文档说__repr__用于查找对象的“正式”字符串表示形式,而__str__用于查找对象的“非正式”字符串表示形式。print语句和str()内置函数使用__str__来显示对象的字符串表示形式,而repr()内置函数使用__repr__来显示对象。让我们举一个例子来了解这两种方法的实际作用。

让我们创建一个datetime对象-

>>> import datetime
>>> today = datetime.datetime.now()
When I use the built-in function str() to display today:
>>> str(today)
'2018-01-12 09:21:58.130922'

我们看到日期以字符串形式显示,用户可以理解日期和时间。现在让我们看看何时使用内置函数repr()-

>>> repr(today)
'datetime.datetime(2018, 1, 12, 9, 21, 58, 130922)'

我们看到它也返回了一个字符串,但是该字符串是日期时间对象的“官方”表示形式,这意味着该“官方”字符串表示形式可以重构该对象-

>>> eval('datetime.datetime(2018, 1, 12, 9, 21, 58, 130922)')
datetime.datetime(2018, 1, 12, 9, 21, 58, 130922)

eval()内置函数接受一个字符串,并将其转换为一个DateTime对象。

因此,在一般情况下,我们编写的每个类都必须具有__repr__,并且如果您认为拥有对象的字符串版本会很有用,例如在datetime的情况下,请创建__str__函数。