Как выполнить интроспекцию объекта в Python 2.x?

Я использую Python 2.x, и у меня есть объект, который я вызываю из эфира; документация по нему не особенно ясна. Я хотел бы иметь возможность получить список свойств для этого объекта и тип каждого свойства.

Аналогично, я хотел бы получить список методов для этого объекта, а также любую другую информацию, которую я мог бы найти в этом методе, например количество аргументов и их соответствующие типы.

У меня такое ощущение, что я просто пропустил правильный жаргон в своих поисковых процессах Google. Не то, чтобы я хочу сорваться со спецификой, но это Active Directory, чтобы всегда было весело.

Ответ 1

Ну... Ваша первая остановка будет простой каталог (объект). Это покажет вам все члены объекта, как поля, так и методы. Попробуйте в интерактивной оболочке Python и немного поиграйте.

Например:

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

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

Ответ 2

Как насчет чего-то типа:

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

Более структурированным методом будет использование проверить модуль:

Модуль проверки предоставляет несколько полезных функций, помогающих получать информацию о живых объектах, таких как модули, классы, методы, функции, трассировки, объекты фрейма и объекты кода. Например, он может помочь вам изучить содержимое класса, получить исходный код метода, извлечь и отформатировать список аргументов для функции или получить всю необходимую информацию для отображения подробной трассировки.

Ответ 4

Вы можете посмотреть проверить модуль. Он предоставляет широкий спектр инструментов для проверки живых объектов, а также исходного кода.

Ответ 5

Если вы используете win32com.client.Dispatch, проверка объекта Python может не очень помочь, поскольку это общая оболочка для IDispatch.

Вы можете использовать makepy (который поставляется с Activestate Python) для создания оболочки Python из библиотеки типов. Затем вы можете посмотреть код для обертки.