因为没有属性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')