擅长:python、mysql、java
<p>子类化<code>dict</code>时的另一个问题是内置的<code>__init__</code>不调用<code>update</code>,内置的<code>update</code>不调用<code>__setitem__</code>。因此,如果您希望所有setitem操作都通过您的<code>__setitem__</code>函数,那么您应该确保它被自己调用:</p>
<pre><code>class DictWatch(dict):
def __init__(self, *args, **kwargs):
self.update(*args, **kwargs)
def __getitem__(self, key):
val = dict.__getitem__(self, key)
print 'GET', key
return val
def __setitem__(self, key, val):
print 'SET', key, val
dict.__setitem__(self, key, val)
def __repr__(self):
dictrepr = dict.__repr__(self)
return '%s(%s)' % (type(self).__name__, dictrepr)
def update(self, *args, **kwargs):
print 'update', args, kwargs
for k, v in dict(*args, **kwargs).iteritems():
self[k] = v
</code></pre>