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

Python 如何使用getattr访问属性中的属性?,python,getattr,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'getattr(getattr(value

我所拥有的是一个价值观:

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'

getattr(getattr(value,'number'),'odd')

或从Cat Plus中获取

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

getattr_deep(foo, 'A.bar')
您可以使用(在Python 3.x中):

请参见下面的演示:

>>> 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
>>>

我明白这一点,但我认为有一种更简单的方法,不需要将“数字”和“奇数”分开。输入值x的变化范围很大。有些甚至是value.number.negative.oddAh,这很公平。我不相信有一个内在的方式,但是你问题的副本有一个解决方案,对你很有用。谢谢,工作得很好
>>> 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
>>>