我所拥有的是一个值:
value.number.odd = 7
number.odd
是用户在x
。
所以如果x='number.odd'
,我希望:
getattr(value, x)
会显示value.number.odd
会发生什么,但事实并非如此。相反,我得到:
AttributeError: missing attribute number.odd
编辑:
输入x也可以是X ='number'或'number.negative.prime'
答案 0 :(得分:1)
您可以使用reduce
(Python 3.x中的functools.reduce
):
reduce(getattr, x.split('.'), value)
参见下面的演示:
>>> class A:
... def __init__(self):
... self.odd = 7
...
>>> class B:
... def __init__(self):
... self.number = A()
...
>>> value = B()
>>> value.number.odd
7
>>> x = 'number.odd'
>>> reduce(getattr, x.split('.'), value)
7
>>>
答案 1 :(得分:0)
getattr(getattr(value, 'number'), 'odd')
或者从Cat Plus Plus的Python - getattr and concatenation中取出
def getattr_deep(start, attr):
obj = start
for part in attr.split('.'):
obj = getattr(obj, part)
return obj
getattr_deep(foo, 'A.bar')