在我选择的多项选择题中,有三种选择。 这就是问题所在:
以下哪项是_ 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)就是答案。
所有其他类似问题的答案也说“打印”的功能不正确。
答案错了吗?
由于
答案 0 :(得分:7)
来自the official documentation(强调我的):
object.__str__(self)
由
str()
内置函数和__repr__()
的不同之处在于它不必是有效的Python表达式:可以使用更方便或简洁的表示。 返回值必须是字符串对象。
由于第一个版本没有返回字符串对象,因此它必定是错误的。
答案 1 :(得分:6)
只有第二种方法实际上会返回任何内容。这意味着如果您明确使用str
,例如:
>>> a = str(myobj)
然后只有第二种方法允许您将结果存储在a
中。使用第一种方法,字符串将打印(已经错误),a
将设置为None
。
如果您刚刚使用
,您甚至会注意到这一点>>> print(myobj)
虽然这更容易错过:如果根据您的第一个示例定义__str__()
方法,则在对象上调用print()
将执行该方法,打印字符串,然后返回None
到print
函数,然后打印一个空行。所以你会得到一个额外的,不需要的换行。
答案 2 :(得分:0)
Here's python说什么
对象.__ STR __(个体)
由str()内置函数调用 print语句来计算一个“非正式”字符串表示 宾语。这与__repr __()的不同之处在于它不必是a 有效的Python表达式:更方便或简洁的表示 可以用来代替。返回值必须是字符串对象。
只有选项2才会返回一个字符串。
它也有意义,__str__应该给你一个对象的字符串表示。如果你想得到一个对象的字符串表示,有时候把它放在一个数据库中,有时候写入一个文件,你有__str__方法将它打印到screen / stdout是没有意义的。