magic example data __str__ __getitem__ __eq__ python introspection python-datamodel

example - ¿Cómo realizo la introspección en un objeto en Python 2.x?



python class (5)

¿Qué tal algo así como:

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

Un método más estructurado será usar el módulo de inspección :

El módulo de inspección proporciona varias funciones útiles para ayudar a obtener información sobre objetos en vivo, como módulos, clases, métodos, funciones, rastreo, objetos de marco y objetos de código. Por ejemplo, puede ayudarlo a examinar el contenido de una clase, recuperar el código fuente de un método, extraer y formatear la lista de argumentos para una función u obtener toda la información que necesita para mostrar un rastreo detallado.

Estoy usando Python 2.x y tengo un objeto que estoy convocando desde el éter; la documentación que contiene no es particularmente clara. Me gustaría poder obtener una lista de propiedades para ese objeto y el tipo de cada propiedad.

De forma similar, me gustaría obtener una lista de métodos para ese objeto, además de cualquier otra información que pueda encontrar sobre ese método, como el número de argumentos y sus respectivos tipos.

Tengo la sensación de que simplemente me falta la jerga correcta en mis búsquedas de Google. No es que quiera descarrilar con detalles, pero es Active Directory, así que eso siempre es divertido.


Bueno ... Tu primera parada será un simple dir (objeto). Esto le mostrará todos los miembros del objeto, tanto campos como métodos. Pruébalo en un shell interactivo de Python y juega un poco.

Por ejemplo:

> class Foo: def __init__(self): self.a = "bar" self.b = 4711 > a=Foo() > dir(a) [''__doc__'', ''__init__'', ''__module__'', ''a'', ''b'']


Podrías echar un vistazo al módulo de inspección . Proporciona una amplia variedad de herramientas para la inspección de objetos en vivo, así como el código fuente.


Si está utilizando win32com.client.Dispatch, inspeccionar el objeto Python puede no ser de mucha ayuda ya que es un contenedor genérico para IDispatch.

Puede usar makepy (que viene con Activestate Python ) para generar un contenedor de Python desde la biblioteca de tipos. Luego puede mirar el código del envoltorio.