On Nov 15, 4:58 pm, Steve Howell <showel...@yahoo.com> wrote: > On Nov 15, 4:03 pm, Christian Heimes <li...@cheimes.de> wrote: > > > Try this untested code: > > > class Spam(dict): > > def __getitem__(self, key): > > getitem = self.__dict__.get("__getitem__", dict.__getitem__) > > return getitem(self, key) > > [...] > > [I originally responded...] Not sure how this helps me, unless I am > misunderstanding... >
Ok, now I get where you were going with the idea. The following code runs as expected. Even in pure testing mode, I would want to make it a little more robust, but it illustrates the basic idea that you can monitor just particular objects by overriding the class method to look for an attribute on the instance before doing any special processing. class MyDict(dict): pass dict1 = MyDict() dict1['foo'] = 'bar' dict2 = MyDict() dict2['spam'] = 'eggs' dict3 = MyDict() dict3['BDFL'] = 'GvR' def spy(dict): def mygetitem(self, key): if hasattr(self, '__SPYING__'): value = self.__class__.__old_getitem__(self, key) print 'derefing %s to %s on %s' % (key, value, self) return value if not hasattr(dict.__class__, '__HOOKED__'): setattr(dict.__class__, '__old_getitem__', dict.__class__.__getitem__) setattr(dict.__class__, '__getitem__', mygetitem) setattr(dict.__class__, '__HOOKED__', True) dict.__SPYING__ = True dict1['foo'] # not spied yet spy(dict1) # this changes class and instance dict1['foo'] # spied dict2['spam'] # not spied spy(dict3) # this only changes instance dict3['BDFL'] # spied dict2['spam'] # spied Thanks, Christian! -- http://mail.python.org/mailman/listinfo/python-list