On Nov 15, 7:23*pm, Steve Howell <showel...@yahoo.com> wrote:
> On Nov 15, 10:25*am, Steve Howell <showel...@yahoo.com> wrote:
>
> > [see original post...]
> > I am most
> > interested in the specific mechanism for changing the __getitem__
> > method for a subclass on a dictionary. *Thanks in advance!
>
> Sorry for replying to myself, but I just realized that the last
> statement in my original post was a little imprecise.
>
> I am more precisely looking for a way to change the behavior of foo
> ['bar'] (side effects and possibly return value) where "foo" is an
> instance of a class that subclasses "dict," and where "foo" is not
> created by me. *The original post gives more context and example code
> that does not work as I expect/desire.
[quote from
http://docs.python.org/reference/datamodel.html]
For instance, if a class defines a method named __getitem__(), and x
is an instance of this class, then x[i] is roughly equivalent to
x.__getitem__(i) for old-style classes and type(x).__getitem__(x, i)
for new-style classes.
[/quote]
A quick hack could be:
class Al(dict):
def __getitem__(self, key):
return self.spy(key)
def spy(self, key):
return 'Al'
>>> a = Al()
>>> a[3]
'Al'
>>> a.spy = lambda key: 'test'
>>> a[3]
'test'
>>> b = Al()
>>> b[3]
'Al'
Seems to be what you're after anyway...
hth,
Jon.