Python - getattr和连接

Bit*_*rex 2 python getattr

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

myVariable = foo.A.bar
Run Code Online (Sandbox Code Playgroud)

工作...但是这样的事情:

B = "A"
myVariable = getattr(foo, B + ".bar")
Run Code Online (Sandbox Code Playgroud)

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

Cat*_*lus 11

因为没有属性A.barfoo.属性bar是指向的对象的一部分A,它是一个属性foo.你需要

getattr(foo.A, "bar")
Run Code Online (Sandbox Code Playgroud)

要么

getattr(getattr(foo, 'A'), 'bar')
Run Code Online (Sandbox Code Playgroud)

访问深层属性的通用代码是在点上拆分,直到找到最后一部分(我是从内存写入,未经过测试):

def getattr_deep(start, attr):
    obj = start
    for part in attr.split('.'):
        obj = getattr(obj, part)
    return obj

getattr_deep(foo, 'A.bar')
Run Code Online (Sandbox Code Playgroud)