【发布时间】:2020-06-26 06:49:40
【问题描述】:
我正在寻找的是这样的东西:
self.info['key'].attr2
但我不确定实现它的最优雅的方式是什么。到目前为止,我已经定义了一个如下所示的字典,但没有其中的属性。
self.info = {}
self.info.update({'key':
{'attr1': 2,
'attr2': lambda: self.func(arg1)}
})
但是我必须像这样使用它:
self.info['key']['attr2']()
请注意,我正在寻找的是访问属性等字典值。 This thread 有一个可以在我的情况下使用的答案,也可能是我从上面的子字典中创建一个对象并将其作为主字典的值。
但我想知道是否有更好的方法,也许使用装饰器和更少的代码行,甚至可能不使用字典来完成我在第一行中描述的事情,也许更好:
self['key'].attr2
【问题讨论】:
-
collections.namedtuple,正如您链接的主题中所建议的那样? -
或类似的东西 --> github.com/Infinidat/munch
-
这能回答你的问题吗? Accessing dict keys like an attribute?
-
你为什么要这样做?
-
还有一个 AttrDict 对象。请参阅github.com/bcj/AttrDict 不确定作者对只读状态的含义,可能是时候寻找替代包了。一个优点是您仍然可以使用字典方法,即
o.attr2或o.get("attr2")。大多数情况下,SimpleNamespace 的答案是我的选择。
标签: python dictionary properties attributes