2013-04-24 56 views
1

我試圖定義STR()的一個迷宮對象,並把它打印出來的東西,看起來像這樣:如何在包含換行符時在python中定義__str__?

####### 
#J..P.# 
#.###.# 
#[email protected]#.# 
#@#[email protected]# 
####### 

當我建立字符串返回,但是,它最終得到印刷如:

'#######\n#J..P.#\n#.###.#\n#[email protected]#.#\n#@#[email protected]#\n#######\n' 

我做的是要通過列表的列表(每行是一個列表,而且整個迷宮是這些排列表的列表)並連接一個「\ n」結尾每行。在返回它之前,還有什麼我應該對結果字符串做的,以便在調用print()或str()時對迷宮的字符串表示形式返回第一個需要的表示形式?

+1

你有代碼示例嗎? – Tom 2013-04-24 00:13:19

+0

它已經返回正確的東西......你只需要「打印」它 – jamylak 2013-04-24 01:15:13

回答

0

您是使用print語句打印,還是隻讓Python打印值?例如:

>>> a = "This is a\nmultiline string" 
>>> a 
'This is a\nmultiline string' 
>>> print a 
This is a 
multiline string 

這只是正常的Pythonic行爲。

+0

嗯,我試圖使用doctest來確保我的方法按預期工作。這對於__str__是否意味着爲這個方法做文檔測試不會真正起作用(因爲你必須返回一個字符串而不是打印你所創建的字符串)? – sabliao 2013-04-24 02:08:11

+0

doctest非常直觀:)。你可以通過'str'來測試你想要顯示的結果是什麼'str';如果你希望doctest「看起來更好」,你可能想在doctest中使用'print'。在這種情況下,你可能覺得你正在測試'print'而不是'str'。還有其他的單元測試框架。 – rici 2013-04-24 03:05:14

+0

好的,gotcha。感謝您的迴應! – sabliao 2013-04-24 03:15:20

0

您是否嘗試過使用原始字符串? (即包裹在r""" """而不是" "' '的字符串)。

此外,您可能會考慮使用os.linesep而不是硬編碼\n以獲得OS獨立性。更多關於那here的信息。

相關問題