我想通过名称来访问一个类属性。
类似的东西:
class a:
b=[]
c='b'
eval('a.'+c+'=1')
但这在Python中并不起作用。 我怎么能这样做?
答案 0 :(得分:3)
使用setattr
:
In [1]: class a:
...: b = []
...:
In [2]: setattr(a, 'b', 1)
In [3]: a.b
Out[3]: 1
反向使用getattr
:
In [4]: getattr(a, 'b')
Out[4]: 1
In [5]: getattr(a, 'x', 'default')
Out[5]: 'default'
但是,我非常怀疑,有一种更好的方法来实现你的目标。您是否尝试使用字典而不是类?
答案 1 :(得分:1)
eval
用于评估,使用exec
来“执行”语句:
exec('a.'+c+'=1')
然而,考虑使用both的风险。您可以查看this answer表达式和语句之间的区别。
由于您希望按名称设置属性,hop's answer中解释的setattr
是一种更好的做法,比使用exec
更安全。