我之前正在处理一个问题,我想循环遍历一个类的元素,但我不想使用
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不允许它?
答案 0 :(得分:4)
A.k
表示尝试访问k
的名为A
的媒体资源。
使用getattr(A, k)
。
使用eval
:
eval('A.%s' % k)
PS:请尽量不要在代码中使用eval
。