【问题标题】:How to inspect Python objects in similar way like JS objects in Chrome dev console?如何以类似于 Chrome 开发控制台中的 JS 对象的方式检查 Python 对象?
【发布时间】:2016-05-02 19:05:59
【问题描述】:

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

我想在 Python 中拥有相同的功能。我很震惊,我找不到类似的东西。例如,在 IPython GUI 控制台中,当我想检查变量 diff 时,我会得到它的类型:

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 中完成的:

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

【问题讨论】:

  • 你得到__repr__,它不一定只是类型(这是默认值)。尝试例如dir(thing).
  • 你可以迭代diff。在那一行:list(diff)
  • @GeorgePetrov 我不想迭代任何东西,我想要一个交互式内省! ;)
  • @jonrsharpe 感谢您的纠正,但我的意思是我没有得到对象本身(它的视觉表示)。
  • ...它的视觉表现。

标签: python


【解决方案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 标准中的检查模块 下面是对象自省的库。

Original answer by titusjan

【讨论】:

  • 虽然这个答案对我来说已经足够了,但谢谢你,我想再次发布一个链接,在我的问题下面的 cmets 中还有其他有趣的答案:stackoverflow.com/questions/15487839/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
相关资源
最近更新 更多