2012-11-15 47 views
2

在選擇題中,我有三個選項。 這裏有個問題:返回或在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)是答案。

所有其他類似問題的答案也表明,'打印'功能不是正確的。

答案錯了嗎?

感謝

回答

7

the official documentation(重點煤礦):

object.__str__(self)

str()內置函數和由print語句調用來計算的「非正規」的字符串表示目的。這與__repr__()的不同之處在於它不必是有效的Python表達式:可以使用更方便或簡潔的表示。 返回值必須是一個字符串對象。

作爲第一個版本不返回一個字符串對象,它必須是錯誤的。

6

只有第二種方法實際返回任何東西。這意味着,如果你使用str明確,比如像這樣:

>>> a = str(myobj) 

那麼只有第二種方法可以讓你的結果存儲在a。用第一種方法,字符串將是印刷(這已經是錯誤的),並且a將被設置爲None。如果__str__()方法是根據你的第一個例子定義,要求你的對象print()將執行該方法,打印:

如果你只是使用

>>> print(myobj) 

雖然說得容易錯過你甚至會注意到這一點字符串,然後返回Noneprint函數,然後打印一個空行。所以你會得到一個額外的,不需要的換行。

0

Here's什麼蟒蛇說

對象.__海峽__(個體經營)
由STR(被叫)內置函數和由 print語句來計算 對象的「非正式」的字符串表示。這與__repr __()的不同之處在於它不必是有效的Python表達式 :可以使用更方便或簡潔的表示 來代替。返回值必須是一個字符串對象。

只有選擇2返回一個字符串。

它也有意義,__str__應該給你一個對象的字符串表示。如果你想得到一個對象的字符串表示,並且有時將它放在數據庫中,而其他時候寫入一個文件,那麼將__str__方法打印到屏幕/標準輸出中是沒有意義的。

相關問題