2

私が立ち往生している多肢選択問題には、3 つの選択肢があります。ここに質問があります:

_ 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) が答えだと言われています。

他のすべての同様の質問の回答でも、「印刷」を使用した機能は適切ではないことが示されています。

答えは間違っていますか?

ありがとう

4

3 に答える 3

7

公式ドキュメントから(強調鉱山):

object.__str__(self)

str()組み込み関数およびステートメントによって呼び出されprint、オブジェクトの「非公式」文字列表現を計算します。__repr__()これは、有効な Python 式である必要がないという点で とは異なります。代わりに、より便利で簡潔な表現を使用できます。戻り値は文字列オブジェクトでなければなりません。

最初のバージョンは文字列オブジェクトを返さないため、間違っているに違いありません。

于 2012-11-15T08:51:56.693 に答える
6

2 番目のメソッドだけが実際に何かを返します。strこれは、たとえば次のように明示的に使用する場合を意味します。

>>> a = str(myobj)

次に、2 番目の方法でのみ、結果を に保存できますa。最初の方法では、文字列が出力され(これは既に間違っています)、aに設定されNoneます。

使用したばかりの場合でも、これに気付くでしょう

>>> print(myobj)

見落としがちですが__str__()、最初の例に従ってメソッドが定義されている場合、オブジェクトを呼び出すとそのメソッドが実行され、文字列が出力されてから関数print()に戻り、空の行が出力されます。そのため、余分な不要な改行が発生します。Noneprint

于 2012-11-15T08:52:07.003 に答える
0

これがpythonの言うことです

object.__str__(self) オブジェクト
の「非形式的な」文字列表現を計算するために、str() 組み込み関数および print ステートメントによって呼び出されます。これは、有効な Python 式である必要がないという点で __repr__() とは異なります。代わりに、より便利で簡潔な表現を使用できます。戻り値は文字列オブジェクトでなければなりません。

選択肢 2 のみが文字列を返します。

また、 __str__ はオブジェクトの文字列表現を提供することになっています。オブジェクトの文字列表現を取得し、場合によってはデータベースに配置したり、ファイルに書き込んだりする場合、それを画面/標準出力に出力する __str__ メソッドがあることは意味がありません。

于 2012-11-15T08:53:19.893 に答える