[Python-Dev] PEP 443 - Single-dispatch generic functions

Glenn Linderman v+python at g.nevcal.com
Thu May 23 09:31:38 CEST 2013


On 5/23/2013 12:14 AM, Antoine Pitrou wrote:
> On Thu, 23 May 2013 02:33:57 -0400
> Devin Jeanpierre<jeanpierreda at gmail.com>  wrote:
>> >On Thu, May 23, 2013 at 2:04 AM, Antoine Pitrou<solipsis at pitrou.net>  wrote:
>>> > >On Thu, 23 May 2013 12:12:26 +1000
>>> > >Nick Coghlan<ncoghlan at gmail.com>  wrote:
>>>> > >>The binary operators can be more accurately said to use a complicated
>>>> > >>single-dispatch dance rather than supporting native dual-dispatch.
>>> > >
>>> > >Not one based on the type of a single argument, though.
>> >
>> >Why not?
>> >
>> >I'd expect it to look something like this:
>> >
>> >     @singledispatch
>> >     def ladd(left, right):
>> >         return NotImplemented
>> >
>> >     @singledispatch
>> >     def radd(right, left):
>> >         return NotImplemented
>> >
>> >     def add(left, right):
>> >         x = ladd(left, right)
>> >         if x is not NotImplemented:
>> >             return x
>> >         x = radd(right, left)
>> >         if x is not NotImplemented:
>> >             return x
>> >         raise TypeError
>> >
>> >Then instead of defining __add__ you define an overloaded
>> >implementation of ladd, and instead of defining __radd__ you define an
>> >overloaded implementation of radd.
> Well, I don't think you can say add() dispatches based on the type of a
> single argument. But that may be a question of how you like to think
> about decomposed problems.

I suspect the point was not that add can be described as doing single 
dispatch (it can't), but rather that add could possibly be implemented 
in terms of lower-level functions doing single dispatch. If that was the 
point, perhaps the next level point is trying to be that single dispatch 
is a sufficient mechanism that can be augmented (as above) to handle 
more complex cases. Whether the above (which I think would need to use 
raise and try instead of return and if) is sufficient to handle such 
cases is not yet proven. The case Guido mention where radd is tried 
before add would seem to require a bit more complex logic than the above.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20130523/5efa0e41/attachment.html>


More information about the Python-Dev mailing list