如何在Python中使用另一个变量访问命名空间变量

4
我使用以下的json数据创建了一个命名空间,学习自这个SO答案
>>> from __future__ import print_function
>>> import json
>>> from types import SimpleNamespace as Namespace
>>> data = '{"name": "John Smith", "hometown": {"name": "New York", "id": 123}}'
>>> x = json.loads(data, object_hook=lambda d: Namespace(**d))
>>> x.name
'John Smith'

但是如果“name”需要从一个变量中获取,我该如何访问它?
>>> foo='name'
>>> x.foo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'types.SimpleNamespace' object has no attribute 'foo'
>>> 

1
如果您想像这样通过名称查找值,为什么不使用字典(默认值)而不是SimpleNamespace呢? - abarnert
@abarnet,好的,我会这样做,谢谢。 - rodee
1个回答

8

使用getattr函数:

getattr(x, foo)

foo='name'时,x.name将起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接