Как мне выполнить самоанализ на объекте в Python 2.x? - PullRequest
24 голосов
/ 13 февраля 2009

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

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

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

Ответы [ 5 ]

25 голосов
/ 13 февраля 2009

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

Например:

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

> a=Foo()
> dir(a)
['__doc__', '__init__', '__module__', 'a', 'b']
9 голосов
/ 13 февраля 2009

Как насчет чего-то вроде:

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

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

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

5 голосов
/ 13 февраля 2009

" Руководство по интроспекции Python " - хорошая статья для начала.

4 голосов
/ 13 февраля 2009

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

0 голосов
/ 13 февраля 2009

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

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

...