可能重复:
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>
如何让它返回或打印该地点的值?
我是编程新手,尤其是'面向对象编程'的新手,所以我的问题是什么是一个类?如何在类中定义函数?
答案 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