如何在Python 2.x中对对象执行自省?

时间:2009-02-13 15:22:50

标签: python introspection python-datamodel

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

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

我觉得我在Google搜索中只是错过了正确的术语。并不是说我想破坏具体细节,但它是Active Directory,因此总是很有趣。

5 个答案:

答案 0 :(得分:25)

嗯......你的第一站将是一个简单的目录(对象)。这将显示所有对象的成员,包括字段和方法。在交互式Python shell中尝试一下,然后玩一下。

例如:

> class Foo:
   def __init__(self):
    self.a = "bar"
    self.b = 4711

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

答案 1 :(得分:9)

如下:

>>> 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'>)]
>>> 

更有条理的方法是使用inspect module

  

inspect模块提供了几个有用的函数来帮助获取有关活动对象的信息,例如模块,类,方法,函数,回溯,框架对象和代码对象。例如,它可以帮助您检查类的内容,检索方法的源代码,提取和格式化函数的参数列表,或获取显示详细回溯所需的所有信息。

答案 2 :(得分:5)

Guide to Python introspection”是一篇很棒的文章,可以帮助您入门。

答案 3 :(得分:4)

您可以查看inspect module。它提供了各种用于检查活动对象和源代码的工具。

答案 4 :(得分:0)

如果你正在使用win32com.client.Dispatch,那么检查Python对象可能没什么帮助,因为它是IDispatch的通用包装器。

您可以使用makepyActivestate Python附带)来从类型库生成Python包装器。然后你可以看一下包装器的代码。