我开始使用Python编写各种项目的代码(包括Django web开发和Panda3D游戏开发)。

为了帮助我理解发生了什么,我想基本上“看看”Python对象内部,看看它们是如何运行的——比如它们的方法和属性。

假设我有一个Python对象,我需要什么来打印它的内容?这可能吗?


当前回答

Python有一组强大的自省特性。

看看下面的内置函数:

(型) dir () (id) getattr () hasattr () globals () locals () callable ()

Type()和dir()分别对于检查对象的类型及其属性集特别有用。

其他回答

尝试ppretty

from ppretty import ppretty


class A(object):
    s = 5

    def __init__(self):
        self._p = 8

    @property
    def foo(self):
        return range(10)


print ppretty(A(), indent='    ', depth=2, width=30, seq_length=6,
              show_protected=True, show_private=False, show_static=True,
              show_properties=True, show_address=True)

输出:

__main__.A at 0x1debd68L (
    _p = 8, 
    foo = [0, 1, 2, ..., 7, 8, 9], 
    s = 5
)

首先,阅读原文。

其次,使用dir()函数。

检查代码的两个好工具是:

IPython。一个允许你使用制表符完成检查的python终端。 使用PyDev插件的Eclipse。它有一个优秀的调试器,允许您在给定的位置中断,并通过浏览所有变量作为树来检查对象。您甚至可以使用嵌入式终端在该位置尝试编码或键入对象并按'。,让它为你提供代码提示。

我很惊讶居然没人提到帮助!

In [1]: def foo():
   ...:     "foo!"
   ...:

In [2]: help(foo)
Help on function foo in module __main__:

foo()
    foo!

Help让您阅读文档字符串并了解类可能具有的属性,这非常有用。

Python有一组强大的自省特性。

看看下面的内置函数:

(型) dir () (id) getattr () hasattr () globals () locals () callable ()

Type()和dir()分别对于检查对象的类型及其属性集特别有用。