How to access object attribute given string corresponding to name of that attribute
If you want to keep the logic hidden inside the class, you may prefer to use a generalized getter method like so:
class Test: def __init__(self): self.attr1 = 1 self.attr2 = 2 def get(self,varname): return getattr(self,varname)t = Test()x = "attr1"print ("Attribute value of {0} is {1}".format(x, t.get(x)))
Outputs:
Attribute value of attr1 is 1
Another apporach that could hide it even better would be using the magic method __getattribute__
, but I kept getting an endless loop which I was unable to resolve when trying to get retrieve the attribute value inside that method.
Also note that you can alternatively use vars()
. In the above example, you could exchange getattr(self,varname)
by return vars(self)[varname]
, but getattr
might be preferable according to the answer to What is the difference between vars
and setattr
?.
Note: This answer is very outdated. It applies to Python 2 using the new
module that was deprecated in 2008.
There is python built in functions setattr and getattr. Which can used to set and get the attribute of an class.
A brief example:
>>> from new import classobj>>> obj = classobj('Test', (object,), {'attr1': int, 'attr2': int}) # Just created a class>>> setattr(obj, 'attr1', 10)>>> setattr(obj, 'attr2', 20)>>> getattr(obj, 'attr1')10>>> getattr(obj, 'attr2')20