我正在查看Python文档中的内置对象方法,我对文档感兴趣object.__repr__(self)
.这就是它所说的:
由repr()内置函数和字符串转换(反向引号)调用,以计算对象的"官方"字符串表示形式.如果可能的话,这应该看起来像一个有效的Python表达式,可用于重新创建具有相同值的对象(给定适当的环境).如果这不可能,则应返回<...一些有用的描述...>形式的字符串.返回值必须是字符串对象.如果一个类定义了repr()而不是str(),那么当需要该类的实例的"非正式"字符串表示时,也会使用repr().
这通常用于调试,因此表示信息丰富且明确是很重要的
对我来说最有趣的部分是......
如果可能的话,这应该看起来像一个有效的Python表达式,可用于重新创建具有相同值的对象
......但我不确定这意味着什么.它说它应该看起来像一个可以用来重新创建对象的表达式,但这是否意味着它应该只是你可以使用的表达式的一个例子,或者它应该是一个可以执行的实际表达式(eval)等..)重新创建对象?或者......为了纯粹的信息目的,它应该只是重新使用的实际表达式吗?
总的来说,我对这应该放在什么地方有点困惑.
>>> from datetime import date >>> >>> repr(date.today()) # calls date.today().__repr__() 'datetime.date(2009, 1, 16)' >>> eval(_) # _ is the output of the last command datetime.date(2009, 1, 16)
输出是一个字符串,可以由python解释器解析并产生一个相等的对象.
如果那是不可能的,它应该返回一个字符串形式<...some useful description...>
.
它应该是一个Python表达式,当eval'd时,创建一个具有与此对象完全相同属性的对象.例如,如果您的Fraction
类包含两个整数,分子和分母,则您的__repr__()
方法如下所示:
# in the definition of Fraction class def __repr__(self): return "Fraction(%d, %d)" % (self.numerator, self.denominator)
假设构造函数接受这两个值.
准则:如果可以简洁地提供一个精确的表示,将其格式化为Python表达式(这意味着它可以是既eval'd和直接复制到源代码,在正确的上下文).如果提供不精确的表示,请使用<...>
格式.
任何值都有许多可能的表示形式,但Python程序员最感兴趣的是一个重新创建值的表达式.请记住,那些了解Python的人是目标受众 - 这也是不精确表示应该包含相关上下文的原因.即使是默认值
,虽然几乎完全没用,但仍然提供类型,id()
(以区分不同的对象),并指示没有更好的表示可用.