How Do I Perform Introspection on an Object in Python 2.x?

前端 未结 5 1421
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-05 23:42

I\'m using Python 2.x and I have an object I\'m summoning from the aether; the documentation on it is not particularly clear. I would like to be able to get a list of prope

相关标签:
5条回答
  • 2020-12-06 00:06

    If you're using win32com.client.Dispatch, inspecting the Python object might not be much help as it's a generic wrapper for IDispatch.

    You can use makepy (which comes with Activestate Python) to generate a Python wrapper from the type library. Then you can look at the code for the wrapper.

    0 讨论(0)
  • 2020-12-06 00:11

    "Guide to Python introspection" is a nice article to get you started.

    0 讨论(0)
  • 2020-12-06 00:11

    You could have a look at the inspect module. It provides a wide variety of tools for inspection of live objects as well as source code.

    0 讨论(0)
  • 2020-12-06 00:17

    Well ... Your first stop will be a simple dir(object). This will show you all the object's members, both fields and methods. Try it in an interactive Python shell, and play around a little.

    For instance:

    > class Foo:
       def __init__(self):
        self.a = "bar"
        self.b = 4711
    
    > a=Foo()
    > dir(a)
    ['__doc__', '__init__', '__module__', 'a', 'b']
    
    0 讨论(0)
  • 2020-12-06 00:22

    How about something like:

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

    A more structured method will be to use the inspect module:

    The inspect module provides several useful functions to help get information about live objects such as modules, classes, methods, functions, tracebacks, frame objects, and code objects. For example, it can help you examine the contents of a class, retrieve the source code of a method, extract and format the argument list for a function, or get all the information you need to display a detailed traceback.

    0 讨论(0)
提交回复
热议问题