> I have an object to which I dynamically add attributes. My question is how I 
> can inspect and display them at run-time?
> 
> Class a():
>    pass
> 
> Obj1 = a()
> 
> Obj1.name = "Bob"
> Obj1.age = 45

First off, a few suggestions:
- you probably mean 'class', not 'Class' (sorry, but it's just that correct 
actual code helps: copy-paste from the Python prompt when you can. If you have 
a text-editor in your mail program that capitalises things, be careful when 
pasting code).
- use capitalisation (or CamelCase) for class names, lowercase for instances: 
class A, obj1 = A(). This is the usual Python convention.
- I would use new-style classes, ie, inherit from object:
>>> class A(object):
...   pass
... 
>>> obj1 = A()



> dir(a) returns a tuple which contains name and age, but also other things 
> (includings methods, etc.) I could filter this tuple (checking for 
> callable(), etc.)  but I just wondered if there was an existing way of 
> getting just name and age.

Normally, you know which attributes you want to access, so you wouldn't have 
this problem. Better yet, you wrap things in a try-except clause and see if 
that works:
>>> try:
...     obj1.name
... except AttributeError:
...     print "not there"
... 
not there

 
But for this case, when using new-style classes, obj1.__dict__ can help you (or 
obj1.__dict__.keys() ). 
>>> obj1.name = "Bob"
>>> obj1.age = 45
>>> obj1.__dict__
{'age': 45, 'name': 'Bob'}

Or, perhaps somewhat silly: set(dir(obj1)) - set(dir(A)).
>>> set(dir(obj1)) - set(dir(A))
set(['age', 'name'])

but I wouldn't recommend that.

See eg http://docs.python.org/library/stdtypes.html#special-attributes


_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to