Python中与Ruby的“inspect”等效的是什么?

20

我只想在Mac终端快速查看Python对象的属性和值。我该如何做呢?(非常基础的问题,我从未使用过Python)

具体来说,我想查看这个Google App Engine MailHandler示例中的message.attachments是什么(图像、视频、文档等)。

6个回答

19
如果您想转储整个对象,可以使用pprint模块获取其漂亮打印的版本。请注意保留HTML标签。
from pprint import pprint

pprint(my_object)

# If there are many levels of recursion, and you don't want to see them all
# you can use the depth parameter to limit how many levels it goes down
pprint(my_object, depth=2)

编辑:我可能误解了您所说的“对象”的含义 - 如果您想查看类实例,而不是像字典这样的基本数据结构,则可以考虑使用inspect模块。


16

使用inspect模块的getmembers属性。

它会返回一个(key, value)元组列表。如果可用,则从obj.__dict__获取值,并且如果在obj.__dict__中没有相应的条目,则使用getattr。这可以避免为此编写几行代码。


8

更新

有比使用 dir 更好的方法。请查看其他答案。

原始回答

使用内置函数dir(fp)来查看fp的属性。


非常感谢,现在我可以通过循环遍历它们并打印 key = object[value] (key = value)。有更好的方法吗? - Lance
我想不出其他的方法,除了可能是getattr,另一个内置函数。 - Manoj Govindan
有更好的方法,但如果您只是在控制台中进行探索,试图了解特定对象/模块上可用选项的想法,则“dir”是一个不错的快速、简单的一行代码,不需要任何导入或其他。 - Tyler

2

尝试

repr(obj) # returns a printable representation of the given object

或者

dir(obj) # the list of object methods

或者

obj.__dict__ # object variables

2
我很惊讶没有人提到Python的__str__方法,它提供了一个对象的字符串表示。不幸的是,在pdb中似乎不能自动打印出来。
可以使用__repr__,但__repr__还有其他要求:首先,你(至少在理论上)应该能够eval() __repr__的输出,尽管这个要求似乎只有很少被强制执行。

1
Python中的__repr__作为Ruby中.inspect的等价物我给出一个+1。 我认为Python的__str__更类似于Ruby的.to_s - Ron Klein

0

或者将Abrer和Mazur的答案统一起来,得到:

from pprint import pprint
pprint(my_object.__dict__ )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接