因此,在我的代码中使用getattr时,我发现了以下内容:
myVariable = foo.A.bar
有效...但是这样的事情:
B = "A"
myVariable = getattr(foo, B + ".bar")
返回foo不包含属性A.bar的错误。我哪里错了?谢谢!
答案 0 :(得分:11)
因为A.bar
上没有属性foo
。属性bar
是A
指向的对象的一部分,foo
是getattr(foo.A, "bar")
的属性。你需要
getattr(getattr(foo, 'A'), 'bar')
或
def getattr_deep(start, attr):
obj = start
for part in attr.split('.'):
obj = getattr(obj, part)
return obj
getattr_deep(foo, 'A.bar')
访问深层属性的通用代码是在点上拆分,直到找到最后一部分(我从内存写入,未经测试):
{{1}}
答案 1 :(得分:2)
相当于:
myVariable = foo.A.bar
使用getattr将需要两个步骤。
aObject = getattr(foo, 'A')
myVariable = getattr(aobject, 'bar')
以你的方式做到这一点`myVariable = getattr(foo,B +“。bar”) 表示'myVariable = getattr(foo,“B.bar”)'getAttr现在查找字符串“B.bar”,显然不存在。