在python中的__str__方法中返回或打印

时间:2012-11-15 08:48:50

标签: python

在我选择的多项选择题中,有三种选择。 这就是问题所在:

以下哪项是_ str _method的定义?

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)就是答案。

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

答案错了吗?

由于

3 个答案:

答案 0 :(得分:7)

来自the official documentation(强调我的):

  

object.__str__(self)

     

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

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

答案 1 :(得分:6)

只有第二种方法实际上会返回任何内容。这意味着如果您明确使用str,例如:

>>> a = str(myobj)

然后只有第二种方法允许您将结果存储在a中。使用第一种方法,字符串将打印(已经错误),a将设置为None

如果您刚刚使用

,您甚至会注意到这一点
>>> print(myobj)

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

答案 2 :(得分:0)

Here's python说什么

  

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

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

它也有意义,__str__应该给你一个对象的字符串表示。如果你想得到一个对象的字符串表示,有时候把它放在一个数据库中,有时候写入一个文件,你有__str__方法将它打印到screen / stdout是没有意义的。