2013-03-29 44 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()

相关问题