> 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 - [email protected]
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor