擅长:python、mysql、java
<p>您所面临的问题是,yu正在尝试构建一个本机的<code>dict</code>——对于这个类,<code>__getitem__</code>只是检索其值的几种方法之一。由于在Python中实现dict的方式,出于历史和性能的原因,有很多方法可以完全绕过<code>__getitem__</code>,因此,嵌套字典永远不会“包装”在DotDict中(例如:<code>.values()</code>、<code>items()</code>和星图可能会绕过这些)</p>
<p>您真正想要的是子类<a href="https://docs.python.org/3/library/collections.abc.html#collections.abc.MutableMapping" rel="nofollow noreferrer">collections.abc.MutableMapping</a>——它的构造方式确保任何项检索都要经过<code>__getitem__</code>,(但是您必须实现文档中指出的方法,包括<code>__delitem__</code>,<code>__setitem__</code>和<code>__iter__</code>-建议将实际数据作为普通词汇保存在<code>__init__</code>方法中创建的<code>.data</code>属性中</p>
<p>请注意,这也使您能够更好地控制数据,例如,使您能够将数据直接包装在setitem上的自定义类中,而jsut不关心属性检索,或者相反,将任何映射存储为普通字典,以节省内存和提高效率,并在检索时将其包装</p>