Python - getattr和连接

时间:2011-10-15 15:50:52

标签: python getattr

因此,在我的代码中使用getattr时,我发现了以下内容:

myVariable = foo.A.bar

有效...但是这样的事情:

B = "A"
myVariable = getattr(foo, B + ".bar")

返回foo不包含属性A.bar的错误。我哪里错了?谢谢!

2 个答案:

答案 0 :(得分:11)

因为A.bar上没有属性foo。属性barA指向的对象的一部分,foogetattr(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”,显然不存在。