Builtin dict should be callable, since a dict defines a function

Martin v. Löwis martin at v.loewis.de
Fri Dec 20 18:25:25 EST 2002


bokr at oz.net (Bengt Richter) writes:

> >Your misconception is that you want to make one functional access to an 
> >object the preferred one. This is confusing:
> Not to be confrontational, but what gives you the idea that I want
> to make it preferred? 

Your message <atttql$ouf$0 at 216.39.172.122> indicated so. You wrote

# __call__(self, *args): return self[args]

So you want d.__call__ to be the same as d.__getitem__. I was asking
why it shouldn't be 

 def __call__(self, *args):
   return self.get(args)

I.e. d.__call__ = d.__get__

Both are meaningful calling interfaces for the function defined by the
dictionary, yet you prefer one of these two options over the other.

> Even so, I still don't see the objection to the nicer spelling,
> since that syntax is not doing anything by default.

My objection is that such a spelling should have an obvious meaning,
i.e. that one should refuse the temptation to guess. It is not obvious
to me why __getitem__ is better than get.

> One defines a (non-exception-raising) function mapping finite sets 1:1,
> the other maps the rest of the universe to any selected element of the
> universe as well. ISTM the simpler is the more natural default

I question that the exception-raising one is the simpler one. From a
functional point, exception raising is a difficult issue, functions
are conceptually always total.

> But I still would ask the question, "Why should an object which has an
> unambiguous, simple, sensible, intuitively obvious functional
> interpretation refuse to be called as a function (i.e., provide the
> __call__ method wrapper) if this is not already defined ?"

Can't answer this question in general. In the specific case, there is
an easy answer: There is no unambiguous functional interpretation for
dictionaries.

Regards,
Martin



More information about the Python-list mailing list