2013-05-16 65 views
1

我有一個對象列表。我試圖輸出列表中對象的有意義的表示形式,它揭示了一些實例變量,使用最近版本的Python中內置的string formatting capability。我正在使用Python 3.3.0。對象列表的自定義字符串格式

我在列表中爲對象定義了一個__str__方法。如果我嘗試打印單個對象,則會得到__str__方法返回的表示形式。但是如果我嘗試打印整個列表,我會得到通用表示,就好像我沒有定義__str__方法一樣。以下是一個示例:

class CustomClass: 
    def __init__(self): 
     self.instanceVar = 42 

    def __str__(self): 
     return "{} (instanceVar = {})".format(self.__class__.__name__, self.instanceVar) 

testObject = CustomClass() 

print("{}".format(testObject)) 
# CustomClass (instanceVar = 42) 

print("{}".format([testObject])) 
# [<__main__.CustomClass object at 0x1006cbed0>] 

如何獲得第二個打印語句以打印類似[CustomClass (instanceVar = 42)]的東西?是否可以通過將正確的格式字符串傳遞給print函數來完成此操作,還是比這更復雜?

+0

你也可以覆蓋'__repr__' – GP89

+0

@Joran Beasley和unutbu,你們都給出了有用的答案。喬蘭,我決定接受你的答案,因爲你先回答。 –

+0

[在Python中打印對象列表時如何應用\ _ \ _ str \ _ \ _函數](http://stackoverflow.com/questions/3558474/how-to-apply-str-function-when - 打印對象在Python中的列表) –

回答

5

您需要定義其__repr__方法,我相信

class CustomClass: 
    def __str__: 
     return "whatever" 
    def __repr__: 
     return str(self) 
+0

謝謝。我不知道爲什麼我沒有想到要這樣做。 –

+0

當你實現__str__有時你可能也想實現__unicode__ - 對於差異檢查http://stackoverflow.com/questions/1307014/python-str-versus-unicode#1307210 –

3

當打印清單,你在列表中的對象的repr。 因此,要獲得所需的格式,請定義__repr__方法。

如果不定義__str__,但定義__repr__,那麼__repr__將代替__str__何時使用,Python的嘗試查找對象的str。所以如果你不想要,你不必定義兩者。

class CustomClass: 
    def __init__(self): 
     self.instanceVar = 42 

    def __repr__(self): 
     return "{} (instanceVar = {})".format(self.__class__.__name__, self.instanceVar) 
相關問題