如何在python中打印/返回一个类?

时间:2012-10-09 14:12:42

标签: python class object python-2.7

  

可能重复:
  Python: How to print a class or objects of class using print()?

我目前有这段代码:

class Track(object):
    def __init__(self,artist,title,album=None):
        self.artist = artist
        self.title = title
        self.album = album

    def __str__(self):
        return self.title + self.artist + self.album

现在,当我将Track('Kanye West','Roses','Late Registration')之类的内容放入终端时,我得到<__main__.Track object at 0x10f3e0c50>如何让它返回或打印该地点的值?

我是编程新手,尤其是'面向对象编程'的新手,所以我的问题是什么是一个类?如何在类中定义函数?

3 个答案:

答案 0 :(得分:10)

您应该定义__repr__方法:

class Track(object):

    ...

    def __repr__(self):
        return ('Track(artist=%s album=%s title=%s)' 
                % (repr(self.artist), repr(self.title), repr(self.album)))

现在您可以在终端中看到对象的表示形式:

>>> Track('Kanye West','Roses','Late Registration')
Track(artist='Kanye West' album='Roses' title='Late Registration') 

注意 __str____repr__方法之间存在差异:

  • __str__需要将对象转换为字符串。致电:str(obj)
  • __repr__ - 用于人类可读的可视化。致电:repr(obj)

当您进入终端obj时,python会自动调用repr。但是如果使用print obj表达式,python调用str函数:

>>> obj
...repr of obj here...
>>> print obj
...str of obj here...

有关详细信息,请参阅doc

答案 1 :(得分:3)

你的代码很好,但是你忘记了什么。

假设你有这门课程:

class Bob():
    def __init__(self, hobby):
        self.hobby = hobby

在控制台中,你会做一个像这样的爱好的Bob课程:

a = Bob("skiing")
然后为了获得鲍勃的爱好,你可以做到:

print a.hobby

现在 - 回到你的问题,你做了Track('Kanye West','Roses','Late Registration')

您创建了一个对象,但未将该对象分配给变量。所以你的结果就是对象本身...你可以简单地打印对象,这将调用__str__方法。所以...

print Track('Kanye West','Roses','Late Registration')

可行,但如果你想做得更好一点。 (例如)

a = Track('Kanye West','Roses','Late Registration')
print a.title
print a.artist
print a.album

答案 2 :(得分:0)

如果您只是为了调试目的而需要这个来检查对象的内部值,您可以这样做

Track('Kanye West','Roses','Late Registration').__dict__

它会将内部数据表示显示为python dict