像属性一样访问字典“值”?

Aze*_*ila 6 python attributes dictionary properties

我正在寻找的是有这样的东西:

self.info['key'].attr2
Run Code Online (Sandbox Code Playgroud)

但我不确定实现它的最优雅的方式是什么。到目前为止,我已经定义了一个像下面这样的字典,但没有它的属性。

self.info  = {}
self.info.update({'key':
                        {'attr1':   2,
                         'attr2':   lambda: self.func(arg1)}
                       })
Run Code Online (Sandbox Code Playgroud)

但是我将不得不像这样使用它:

self.info['key']['attr2']()
Run Code Online (Sandbox Code Playgroud)

请注意,我正在寻找的是访问字典值(如属性)。这个线程有一个可以在我的情况下使用的答案,也可能是我从上面的子字典中创建一个对象并将其作为主字典的值。

但我想知道是否有更好的方法,也许使用装饰器和更少的代码行,甚至可能不使用字典来做我在第一行中描述的事情,也许更好:

self['key'].attr2
Run Code Online (Sandbox Code Playgroud)

Fri*_*ich 8

这是一个简短的包装器,用于将字典键作为属性访问:

class nameddict(dict):
   __getattr__ = dict.__getitem__

info = nameddict()
info['key'] = nameddict(attr1=2, attr2=3)
Run Code Online (Sandbox Code Playgroud)

然后info['key'].attr2以及info['key']['attr2']info.key.attr2返回3