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

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

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


当前回答

如果你有兴趣查看对象myobj对应的函数的源代码,你可以输入iPython或Jupyter Notebook:

myobj ? ?

其他回答

在Python 3.8中,你可以使用__dict__. __dict__来打印对象的内容。例如,

class Person():
   pass

person = Person()

## set attributes
person.first = 'Oyinda'
person.last = 'David'

## to see the content of the object
print(person.__dict__)  

{"first": "Oyinda", "last": "David"}

首先,阅读原文。

其次,使用dir()函数。

其他人已经提到了dir()内置,这听起来像是您正在寻找的,但这里有另一个很好的提示。许多库——包括大多数标准库——都是以源代码形式发布的。这意味着您可以很容易地直接阅读源代码。诀窍在于找到它;例如:

>>> import string
>>> string.__file__
'/usr/lib/python2.5/string.pyc'

*。Pyc文件已编译,因此删除后面的'c',并在您最喜欢的编辑器或文件查看器中打开未编译的*.py文件:

/usr/lib/python2.5/string.py

我发现这对于发现从给定API引发哪些异常等事情非常有用。这种细节在Python世界中很少有良好的文档。

你可以在shell中使用dir()列出对象的属性:

>>> dir(object())
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

当然,还有inspect模块:http://docs.python.org/library/inspect.html#module-inspect

有一个python代码库构建就是为了这个目的:inspect在python 2.7中介绍过