2015-11-03 74 views
0

playerList包含兩個Player對象(具有str屬性稱爲分別"a""b"),和Player器具__str____repr__。當我將str(playerList)連接到另一個字符串時,我期望字符串被"[a, b]"的形式附加。相反,結果字符串附加"[ , ]"。我做了什麼錯誤,得出了這個結果?爲什麼對`str(someList)`的調用有時會創建一個空格「數組」?

這是我寫的

prompt = "And then choose the opponent you would like to attack from " + str(playerList)

def __str__ (self): 
    return self.name 

def __repr__ (self): 
    return str() 

我得到在標準輸出上:

"And then choose the opponent you would like to attack from [, ]" 

我想要什麼:

"And then choose the opponent you would like to attack from [a,b]" 
+2

return str()?不應該是自我.__ str__? –

+0

尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:[如何創建最小,完整和可驗證的示例。](http://stackoverflow.com/help/mcve) –

+0

希望更新是好的嗎? – Muno

回答

5

__repr__方法返回一個空字符串:

def __repr__(self): 
    return str() 

str()不帶任何參數爲空字符串:

>>> str() 
'' 

如果你想打電話__str__這樣做的直接,或通過selfstr()

return self.__str__() 

return str(self) 

請注意,將列表轉換爲字符串將包括該列表中的所有字符串作爲其表示; repr(stringobject)的輸出,它使用與創建此類字符串時使用的符號相同的符號。該列表['a', 'b']將被轉換爲使用正是符號的字符串:

>>> l = ['a', 'b'] 
>>> l 
['a', 'b'] 
>>> str(l) 
"['a', 'b']" 
>>> print str(l) 
['a', 'b'] 

如果你真的希望包括這些字符串沒有引號,你需要做自己的格式:

>>> '[{}]'.format(', '.join([str(elem) for elem in l])) 
'[a, b]' 
>>> print '[{}]'.format(', '.join([str(elem) for elem in l])) 
[a, b] 
+0

也許你可以解釋,當解釋器顯示一個列表時,它顯示列表中每個項目的repr,因此'',''爲一個兩元素列表。 –

+0

這就是我說的:) –

+0

@Robᵩ:是的,但是我的班車到達了我的站點,所以我不得不出門走了一段時間。 :-) –

相關問題