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

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

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

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


person Community    schedule 13.02.2009    source источник


Ответы (5)


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

Например:

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

> a=Foo()
> dir(a)
['__doc__', '__init__', '__module__', 'a', 'b']
person unwind    schedule 13.02.2009
comment
Я попробовал dir, но не нашел некоторых доступных мне свойств. Это объект Active Directory (ADsNameSpaces, GetObject), и я надеялся увидеть, есть ли в списке различные атрибуты, такие как sn, cn и т. Д., Но их нет. Возможно, я выбрал для этого не тот объект. - person ; 13.02.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'>)]
>>> 

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

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

person gimel    schedule 13.02.2009
comment
Что касается getattribute, то это довольно неприятно. Намного лучше использовать встроенный getattr (). - person Devin Jeanpierre; 13.02.2009
comment
смело заменяйте o .__ getattribute __ (a) на getattr (o, a) - person gimel; 13.02.2009

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

person Akbar ibrahim    schedule 13.02.2009
comment
Не очень глубокая статья. - person AdamC; 29.09.2017

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

person SilentGhost    schedule 13.02.2009

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

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

person ConcernedOfTunbridgeWells    schedule 13.02.2009