如何在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中打印/返回一个类? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何打印 Python 类? [复制]

如何在 Python3 中向调用函数返回更多值并显示结果,目前它只打印第一个值而不增加? [复制]

python中返回和打印之间的区别? [复制]

如何在 python 中打印 n 次? [复制]

Python 和 Flask 如何返回列表? [复制]

如何在python中打印二维对象数组? [复制]