I want to access a class attribute by a string with its name.
Something like:
class a:
b=[]
c='b'
eval('a.'+c+'=1')
But that doesn't work in Python. How can I do this?
I want to access a class attribute by a string with its name.
Something like:
class a:
b=[]
c='b'
eval('a.'+c+'=1')
But that doesn't work in Python. How can I do this?
Use setattr
:
In [1]: class a:
...: b = []
...:
In [2]: setattr(a, 'b', 1)
In [3]: a.b
Out[3]: 1
Use getattr
for the reverse:
In [4]: getattr(a, 'b')
Out[4]: 1
In [5]: getattr(a, 'x', 'default')
Out[5]: 'default'
I very much suspect, though, that there is a better way to achieve whatever your goal is. Have you tried using a dictionary instead of a class?
eval
is for evaluation, use exec
to 'execute' statements:
exec('a.'+c+'=1')
Yet, consider the risk of using both. And you can check out this answer for the difference between expressions and statements.
Since you are looking to set attribute by name, setattr
explained in hop's answer is a better practice, and safer than using exec
.