使用字符串访问类的元素

时间:2016-01-15 16:44:41

标签: python

我之前正在处理一个问题,我想循环遍历一个类的元素,但我不想使用

for attr, value in o.__dict__.iteritems()

因为那只会返回该对象的元素。我有两个对象A and B,我想使用attr变量,因此我可以比较A and B,但我找不到任何方法可以做到这一点。我知道有eval()但这不起作用。这是我想要完成的一个例子

class foo():
    def __init__(self,i=None, j=None):
        self.i = i
        self.j = j

A = foo(5)
B = foo(None, 2)

#If I have the string "i" I want to be able to access attribute i
list_of_attr = [k for k in dir(B) if not k.startswith('__')]

#list_of_attr = ['i','j']
for k in list_of_attr:
   print A.k

#expected output
5
None

而是抛出错误AttributeError: foo instance has no attribute 'k'

我在想A.eval(k)可能有效,但它会尝试评估eval()作为属性

有没有办法做到这一点或Python不允许它?

1 个答案:

答案 0 :(得分:4)

A.k表示尝试访问k的名为A的媒体资源。

使用getattr(A, k)

使用eval

eval('A.%s' % k)

PS:请尽量不要在代码中使用eval