如何在python中打印/返回一个类? [复制]
Posted
技术标签:
【中文标题】如何在python中打印/返回一个类? [复制]【英文标题】:how to print/return a class in python? [duplicate] 【发布时间】:2012-09-29 21:38:09 【问题描述】:可能重复: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>
我怎样才能让它返回或打印那个地方的值?
我是编程新手,尤其是“面向对象编程”的新手,所以我的问题是类到底是什么?如何在类中定义函数?
【问题讨论】:
试试str(Track('Kanye West','Roses','Late Registration'))
先搜索:***.com/questions/1535327/…
我试过搜索,但我还是有点困惑,我想我正在寻找更多日常用语的解释。
【参考方案1】:
你应该定义__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。
【讨论】:
__repr__
应该创建一个有效的 Python 表达式来重新创建对象。因此,您应该更改格式或改用__str__
。见docs.python.org/reference/datamodel.html#object.__repr__
虽然这会产生预期的结果,但这可能不是 OP 想要的,并且不在 OP 的范围内,显然有限的 python 技能集 - 我认为他只是想知道如何打印答案,一个简单的解决方案(比如我的)就是“打印”【参考方案2】:
您的代码很好,但您忘记了一些事情。
假设你有这个课程:
class Bob():
def __init__(self, hobby):
self.hobby = hobby
在控制台中,您将创建一个具有以下爱好的 Bob 类:
a = Bob("skiing")
那么要获得 Bob 的爱好,你可以这样做:
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
【讨论】:
【参考方案3】:如果您只是为了调试目的而需要它来检查对象的内部值,您可以这样做
Track('Kanye West','Roses','Late Registration').__dict__
它会将内部数据表示为 python dict
【讨论】:
比起显式访问__dict__
,我觉得使用vars(name_of_object)
看起来更简洁一些。以上是关于如何在python中打印/返回一个类? [复制]的主要内容,如果未能解决你的问题,请参考以下文章