因此,在我的代码中使用 getattr 时,我发现了以下内容:
myVariable = foo.A.bar
工作......但这样的事情:
B = "A"
myVariable = getattr(foo, B + ".bar")
返回 foo 不包含属性 A.bar 的错误。我哪里错了?谢谢!
因为 上没有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')
相当于:
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”。