Как выполнить интроспекцию объекта в 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'>)]
>>>
Более структурированным методом будет использование проверить модуль:
Модуль проверки предоставляет несколько полезных функций, помогающих получать информацию о живых объектах, таких как модули, классы, методы, функции, трассировки, объекты фрейма и объекты кода. Например, он может помочь вам изучить содержимое класса, получить исходный код метода, извлечь и отформатировать список аргументов для функции или получить всю необходимую информацию для отображения подробной трассировки.
Ответ 3
" Руководство по интроспекции Python" - хорошая статья, чтобы вы начали.
Ответ 4
Вы можете посмотреть проверить модуль. Он предоставляет широкий спектр инструментов для проверки живых объектов, а также исходного кода.
Ответ 5
Если вы используете win32com.client.Dispatch, проверка объекта Python может не очень помочь, поскольку это общая оболочка для IDispatch.
Вы можете использовать makepy (который поставляется с Activestate Python) для создания оболочки Python из библиотеки типов. Затем вы можете посмотреть код для обертки.