Overloading __getitem__

inhahe inhahe at gmail.com
Thu May 22 19:02:24 EDT 2008


actually i ddin't think about the fact that you're overloading dict, which 
can already take multiple values in getitem

so how about

class crazy: pass

and then in your dict class:

def __getitem__(*args):
  if args[-1] is crazy:
    return self.get(args[:-1])*5
  else:
    return self.get(args)

and then
print foo[1,2] #not crazy
print foo[1,2,crazy] #crazy

I *think* that would work




"Andreas Matthias" <amat at kabsi.at> wrote in message 
news:uf6hg5-ca9.ln1 at buckbeak.hogwarts...
> The following code doesn't run but I hope you get what I
> am trying to do.
>
>
> class my_dict (dict):
>
>    def __getitem__ (self, key, crazy = False):
>        if crazy == True:
>            return 5 * self.get(key)
>        else:
>            return self.get(key)
>
>
> foo = my_dict()
> foo['a'] = 123
>
> print foo['a']
> print foo['a', crazy = True]
>
>
> Is it somehow possible to overload __getitem__ with an additional
> argument? Are there other possibilities to achiev this? Or is
> the only solution to this to write a normal function call
> `def my_get (self, key, crazy=False)'?
>
>
> Ciao
> Andreas 





More information about the Python-list mailing list