How do you programmatically set an attribute?


Suppose I have a python object x and a string s, how do I set the attribute s on x? So:

>>> x = SomeObject()
>>> attr = "myAttr"
>>> # magic goes here
>>> x.myAttr

What"s the magic? The goal of this, incidentally, is to cache calls to x.__getattr__().

Answer rating: 329

setattr(x, attr, "magic")

For help on it:

>>> help(setattr)
Help on built-in function setattr in module __builtin__:

    setattr(object, name, value)
    Set a named attribute on an object; setattr(x, "y", v) is equivalent to
    ''x.y = v"".

However, you should note that you can"t do that to a "pure" instance of object. But it is likely you have a simple subclass of object where it will work fine. I would strongly urge the O.P. to never make instances of object like that.