3

可能重复:
Python:如何使用 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>如何让它返回或打印那个地方的值?

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

4

3 回答 3

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...

有关更多信息,请参阅文档

于 2012-10-09T14:13:59.953 回答
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
于 2012-10-09T14:20:47.660 回答
0

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

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

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

于 2012-10-09T14:21:26.907 回答