2013-03-29 78 views
2

我正在實例化一個類,並且只是想使用print來轉儲對象。當我這樣做時,我似乎得到某種對象ID。我不能只發出一個「print ObjectName」,結果只是對象的屬性?下面是我在做什麼的例子:當我運行此我得到以下結果使用print輸出Python中的對象

class Car: 
    def __init__(self, color, make, model): 
     self.color = color 
     self.make = make 
     self.model = model 

    def getAll(): 
     return (self.color, self.make, self.model) 


mycar = Car("white","Honda","Civic") 
print mycar 

<__main__.Car instance at 0x2b650357be60> 

我希望看到的顏色,牌子,型號值也是如此。我知道,如果我通過單獨打印出來:

print mycar.color,mycar.make,mycar.model 

它輸出:

white Honda Civic 

正如我所期望的。爲什麼「打印mycar」輸出一個實例id而不是屬性值?

+1

一記叫這個問題問的爲什麼Python,默認情況下,打印屬性值:如果其中一個屬性更復雜一些,比如連接到數據庫,會發生什麼?它會如何打印出來?此外,如果您的汽車有120種不同的屬性(或者更好,就像汽車功能字典),會發生什麼情況。全部功能列表是否應該打印? Python中的默認值雖然通常沒有幫助,但是相當安全,並且不會假設您的類有任何問題。 –

回答

3

在你的類定義.__str__() method。它會打印您的自定義類實例時被調用:

class Car: 
    def __init__(self, color, make, model): 
     self.color = color 
     self.make = make 
     self.model = model 

    def __str__(self): 
     return ' '.join((self.color, self.make, self.model)) 

演示:

>>> mycar = Car("white","Honda","Civic") 
>>> print mycar 
white Honda Civic 

此外,你可以實現一個.__repr__() method也提供您的實例的調試器友好的表示。

2

您需要實現__str____repr__得到您的類對象的「友好」的價值觀。

更多這方面的詳細看here

__repr__爲對象的官方串represntation,由repr()調用,__str__是非正式的字符串表示,由str()

相關問題