如何像Chrome开发者控制台中的JS对象一样检查Python对象?

时间:2016-01-26 09:00:42

标签: python

在Chrome开发控制台中,可以键入变量名称,输出是对象的可视化和交互式表示。 (在JavaScript对象中就像字典一样,这很容易。)

我想在Python中使用相同的功能。我很震惊,我找不到类似的东西。例如,当我想检查变量diff时,在IPython GUI控制台中,我在这种情况下得到了它的类型:

In [5]: diff
Out[5]: <_pygit2.Diff at 0x1a69930>

此命令检查变量,但输出对于复杂对象是混乱的(此处输出不完整):

In [10]: inspect.getmembers(diff)
Out[10]: [('__class__', <type '_pygit2.Diff'>), ('__delattr__', <method-wrapper '__delattr__' of _pygit2.Diff object at 0x1a69930>), ('__doc__', 'Diff objects.'), ('__format__', <built-in method __format__ of _pygit2.Diff object at 0x1a69930>), ('__getattribute__', (...)

我认为当语言没有类型系统时,实时内省非常有用。也许这个功能只在特殊的Python IDE中可用?

要说明如何在Chrome中完成:

example of Chrome devtools object introspection

在图片上,您可以看到变量f的内省。它是Form类型的对象,您可以单击它并查看其属性(例如_meetingTimeFrom)及其值,您可以进一步单击属性来检查它们,您可以看到对象的方法(例如字段__proto__,这可能是一种如何在JavaScript中查看对象方法的方法。

1 个答案:

答案 0 :(得分:1)

如果您只想以可读方式列出属性,pprint.pprint是您的朋友:

from pprint import pprint
from inspect import getmembers

class X:
    def __init__(self, x, y):
        self.x = x
        self.y = y

x = X([42] * 5, [True] * 15)

pprint(getmembers(x))
pprint(vars(x))
  

如果您对GUI感兴趣,请查看   objbrowser。它使用Python标准中的inspect模块   用于下面的对象内省的库。

     

objbrowserscreenshot

Original answer来自titusjan