Inspecting the Instance Vars in a class/object - How?

Diez B. Roggisch deets at nospam.web.de
Wed Aug 27 11:06:27 CEST 2008


BrendanC wrote:

> I'm trying to understand reflection/introspection in Python. How can I
> identify the the type of attribute (e.g. instance var) in a class?
> The following returns all the class attributes (methods and instance
> vars).
> 
> However I'm interested in identifying the type of value for each case
> - (e.g. I'd like to identify the instance variables separately). (The
> Inspect module has an ismethod method, but not an isinstancevariable
> method).

Because there is no such thing, as it is not a *type*. It's a question on
where the value is stored.

Every *instance* has a dictionary holding it's data. You can normally access
it using __dict__. 

But it's not "pure" in the sense that only the variables you created
yourself are contained. It also contains the reference to the class.

On the class, there is also a __dict__, which contains the
method-descriptors and class-variables.

In the face of multi-inheritance, things get even more complicated, as then
the values are acquired through MRO-lookup.
 
> e.g. In the following example I'd like to extract the class vars
> strvar and intNum and ignore the methods/other attribute types.
> 
> What is the best way  to do this?
> 
> class test:
> # Dummy Class for reflection testing
>     strVar = '1234'
>     intNum = 0
> 
>     def nullmethod():
>         pass
> 
>     def addmethod(self,v1, v2):
>         v = v1 + v2
>         return v
> 
> if __name__ == "__main__":
>   mytest = test()
>   for key in dir(mytest):
>         value = getattr(object, key)
>         print 'Key: %s ; Value %s '  % (str(key) ,str(value))

if name in mytest.__dict__:
    print "instance variable"




More information about the Python-list mailing list