擅长:python、mysql、java
<p>不要继承dict中的内部版本。即使重写<code>dict.__getitem__()</code>方法,<code>dict.get()</code>也不会如预期的那样工作。在</p>
<p>正确的方法是从<code>collections</code>继承<code>abc.Mapping</code>。在</p>
<pre><code>from collections.abc import Mapping
class LazyDict(Mapping):
def __init__(self, *args, **kw):
self._raw_dict = dict(*args, **kw)
def __getitem__(self, key):
func, arg = self._raw_dict.__getitem__(key)
return func(arg)
def __iter__(self):
return iter(self._raw_dict)
def __len__(self):
return len(self._raw_dict)
</code></pre>
<p>然后您可以:</p>
^{pr2}$
<p>我还列出了示例代码和示例:<a href="https://gist.github.com/gyli/9b50bb8537069b4e154fec41a4b5995a" rel="nofollow noreferrer">https://gist.github.com/gyli/9b50bb8537069b4e154fec41a4b5995a</a></p>