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