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

Antoine Pitrou solipsis at pitrou.net
Thu May 23 09:14:35 CEST 2013


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.

Regards

Antoine.


More information about the Python-Dev mailing list