python eval在运行时定位特定的类变量

时间:2017-12-10 21:48:37

标签: python class eval

我试图在运行时将变量绑定到类中的特定列表。下面的代码段有效,但我想在eval表达式中使用类名而不是变量。即相当于:

 
mybin = 'bin2'
eval(foo.mybin) 

这显然不会起作用...但是在尝试粘合" foo'之后我似乎无法弄清楚各种语法之后的语法。和" mybin'在一起。

class A:
    bin1 = [3,6,9]
    bin2 = [12,14,25]

foo = A()

mybin = 'foo.bin2'

for bin in eval(mybin):
    print bin

输出:

 12
 14
 25

2 个答案:

答案 0 :(得分:1)

不要使用eval。对于动态属性访问,python知道getattr

mybin = 'bin2'
for bin in getattr(foo, mybin):
    print bin

答案 1 :(得分:0)

也许f-string是你可能喜欢的:

class A():
  bin1 = [1, 2]
  bin2 = [12, 14, 25]

foo = A()

my_bin = 'bin2'

print(eval(f'foo.{my_bin}'))
#[12, 14, 25]