2

在我陷入的多项选择题中,有三个选项。问题来了:

以下哪一项是_str_方法的定义

1. def __str__(self):
      print "(%s, %s, %s)" % (self._n, self._p, self._b)

2. def __str__(self):
      return "(%s, %s, %s)" % (self._n, self._p, self._b)

3. Both

我对它们都进行了测试,并且都有效,但据说(2)是答案。

所有其他类似问题的答案也表明带有“打印”的功能不是正确的。

答案错了吗?

谢谢

4

3 回答 3

7

官方文档(强调我的):

object.__str__(self)

str()内置函数和print语句调用以计算对象的“非正式”字符串表示。这与__repr__()它不必是有效的 Python 表达式不同:可以使用更方便或更简洁的表示。返回值必须是字符串对象。

由于第一个版本没有返回字符串对象,所以它一定是错误的。

于 2012-11-15T08:51:56.693 回答
6

只有第二种方法实际上返回任何东西。这意味着如果您str显式使用,例如这样:

>>> a = str(myobj)

那么只有第二种方法允许您将结果存储在a. 使用第一种方法,将打印字符串(这已经是错误的),并将a设置为None.

如果您刚刚使用,您甚至会注意到这一点

>>> print(myobj)

虽然这更容易错过:如果该__str__()方法是根据您的第一个示例定义的,则调用print()您的对象将执行该方法,打印字符串,然后返回Noneprint函数然后打印一个空行。所以你会得到一个额外的、不需要的换行符。

于 2012-11-15T08:52:07.003 回答
0

是蟒蛇说的

object.__str__(self)
由 str() 内置函数和 print 语句调用以计算对象的“非正式”字符串表示。这与 __repr__() 的不同之处在于它不必是有效的 Python 表达式:可以使用更方便或更简洁的表示来代替。返回值必须是字符串对象。

只有选项 2 返回一个字符串。

这也是有道理的, __str__ 应该为您提供对象的字符串表示形式。如果您想获取 object 的字符串表示形式,有时将其放在数据库中,有时写入文件,那么您有一个 __str__ 方法将其打印到屏幕/标准输出是没有意义的。

于 2012-11-15T08:53:19.893 回答