如何在python中输出/返回类?

how to print/return a class in python?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Python: How to print a class or objects of class using print()?

我现在有这个代码:

1
2
3
4
5
6
7
8
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>,我怎样才能让它返回或打印那个地方的值呢?

我不熟悉编程,尤其是"面向对象编程",所以我的问题是什么是类?如何在类中定义函数?


您应该定义__repr__方法:

1
2
3
4
5
6
7
class Track(object):

    ...

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

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

1
2
>>> 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函数:

1
2
3
4
>>> obj
...repr of obj here...
>>> print obj
...str of obj here...

有关详细信息,请参阅文档。


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

假设你有这门课:

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

在控制台上,你可以做一个有如下爱好的鲍勃班:

1
a = Bob("skiing")

然后,为了获得鲍勃的爱好,你可以做:

1
print a.hobby

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

您创建了一个对象,但没有将该对象赋给变量。所以你的结果就是物体本身…您可以简单地打印对象,它将调用__str__方法。所以…

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

会有用的,但如果你想做得更好一点。(例如)

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


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

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

它将以python dict的形式显示内部数据表示