擅长:python、mysql、java
<p>从<code>dict</code>直接继承的问题是很难遵守完整的<code>dict</code>契约(例如,在您的情况下,<code>update</code>方法的行为不一致)。</p>
<p>你想要的是扩展<a href="http://docs.python.org/2/library/collections.html#collections-abstract-base-classes">^{<cd4>}</a>:</p>
<pre><code>import collections
class FixedDict(collections.MutableMapping):
def __init__(self, data):
self.__data = data
def __len__(self):
return len(self.__data)
def __iter__(self):
return iter(self.__data)
def __setitem__(self, k, v):
if k not in self.__data:
raise KeyError(k)
self.__data[k] = v
def __delitem__(self, k):
raise NotImplementedError
def __getitem__(self, k):
return self.__data[k]
def __contains__(self, k):
return k in self.__data
</code></pre>
<p>注意,原始的(包装的)dict将被修改,如果不希望发生这种情况,请使用<a href="http://docs.python.org/2/library/copy.html">^{<cd5>} or ^{<cd6>}</a>。</p>