Python - getattr与连接操作
我在代码中玩弄getattr这个函数时发现了一些事情:
myVariable = foo.A.bar
这个是可以正常工作的……但是像这样:
B = "A"
myVariable = getattr(foo, B + ".bar")
就会报错,说foo里面没有属性A.bar。我哪里出错了呢?谢谢!
2 个回答
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",但显然这个东西是不存在的。
12
因为在 foo
上没有 A.bar
这个属性。属性 bar
是指向 A
的对象的一部分,而 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')