SomeClassInstance.[attributename]

Alex Martelli aleaxit at yahoo.com
Mon Nov 6 16:00:28 CET 2000


<tattoom at my-deja.com> wrote in message news:8u6dq7$73l$1 at nnrp1.deja.com...

A bit hard to read, but, I'll try to reformat it...:

"""
Python does provide a built-in function to check for the existence of an
object's attribute:
    hasattr(object, name)
What puzzles me to no end, is the fact one straight (IMHO) corollary to
the above functionality doesn't seem to exist (at least I can't find
it :-). Namely, the possibility to access an instance's attribute in a
'parameterized' (is that a correct word?) way.

Assume that Foo is an instance of some class:

    theAttribute = 'fubar'
    if hasattr(Foo, theAttribute):
        fubar = Foo.[theAttribute]

Where Foo.[theAttribute] would yield Foo.fubar
You get my point. Is there a way in Python (as elegant and straightforward
as this one) to achieve the above?If not, I'd be interested in seeing
suggestions on how to implement it.
"""


I think the built-in getattr function is what you want:

    if hasattr(Foo, theAttribute):
        fubar = getattr(Foo, theAttribute)

Most often, you don't need to 'protect' the getattr call
with an hasattr test, since getattr can take a third
argument, the 'default value' to return if the object
does NOT have the attribute.

For example, the code:

    if hasattr(Foo, theAttribute):
        fubar = getattr(Foo, theAttribute)
    else:
        fubar = 23

can be more concisely, clearly, & speedily expressed as just:

    fubar = getattr(Foo, theAttribute, 23)


Alex






More information about the Python-list mailing list