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

2021-06-13 13:46:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我所拥有的价值在于:

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.素数'

2条回答
网友
1楼 ·

您可以使用^{}来实现这个(^{}在python3.x中):

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
>>>
网友
2楼 ·

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

或由Cat 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')

相关问题