如何在Python2.x中对对象执行Introspection ?

How Do I Perform Introspection on an Object in Python 2.x?

我使用的是python 2.x,我有一个从以太召唤来的对象;关于它的文档并不特别清楚。我希望能够获得该对象的属性列表以及每个属性的类型。

类似地,我也希望获得该对象的方法列表,以及可以在该方法上找到的任何其他信息,例如参数的数量和它们各自的类型。

我有种感觉,在我的谷歌搜索中,我只是缺少了正确的行话。不是说我想把细节搞乱,而是说它是Active Directory,所以这总是很有趣的。


好。。。您的第一站将是一个简单的dir(对象)。这将显示对象的所有成员,包括字段和方法。在一个交互式的python shell中进行尝试,并在其中进行一些尝试。

例如:

1
2
3
4
5
6
7
8
> class Foo:
   def __init__(self):
    self.a ="bar"
    self.b = 4711

> a=Foo()
> dir(a)
['__doc__', '__init__', '__module__', 'a', 'b']


比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> o=object()
>>> [(a,type(o.__getattribute__(a))) for a in dir(o)]
[('__class__', <type 'type'>), ('__delattr__', <type 'method-wrapper'>),
('__doc__', <type 'str'>), ('__format__', <type 'builtin_function_or_method'>),
('__getattribute__', <type 'method-wrapper'>), ('__hash__', <type 'method-wrapper'>),
('__init__', <type 'method-wrapper'>),
('__new__', <type 'builtin_function_or_method'>),
('__reduce__', <type 'builtin_function_or_method'>),
('__reduce_ex__', <type 'builtin_function_or_method'>),
('__repr__', <type 'method-wrapper'>), ('__setattr__', <type 'method-wrapper'>),
('__sizeof__', <type 'builtin_function_or_method'>),
('__str__', <type 'method-wrapper'>),
('__subclasshook__', <type 'builtin_function_or_method'>)]
>>>

更结构化的方法是使用检查模块:

The inspect module provides several useful functions to help get information about live objects such as modules, classes, methods, functions, tracebacks, frame objects, and code objects. For example, it can help you examine the contents of a class, retrieve the source code of a method, extract and format the argument list for a function, or get all the information you need to display a detailed traceback.


"Python自省指南"是一篇很好的文章,可以帮助您开始学习。


您可以查看检查模块。它提供了各种各样的工具来检查活动对象以及源代码。


如果您使用的是win32com.client.dispatch,那么检查python对象可能没什么帮助,因为它是IDispatch的通用包装器。

可以使用makepy(与activestate python一起提供)从类型库生成python包装器。然后您可以查看包装器的代码。