如何使用getattr访问属性中的属性?

时间:2014-06-19 19:06:27

标签: python getattr

我所拥有的是一个值:

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'

2 个答案:

答案 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')