[Python-Dev] PEP 443 - Single-dispatch generic functions (including ABC support)
PJ Eby
pje at telecommunity.com
Tue May 28 23:27:17 CEST 2013
On Tue, May 28, 2013 at 3:41 PM, Russell E. Owen <rowen at uw.edu> wrote:
> Is it true that this cannot be used for instance and class methods? It
> dispatches based on the first argument, which is "self" for instance
> methods, whereas the second argument would almost certainly be the
> argument one would want to use for conditional dispatch.
You can use a staticmethod and then delegate to it, of course. But it
probably wouldn't be too difficult to allow specifying which argument
to dispatch on, e.g.:
@singledispatch.on('someArg')
def my_method(self, someArg, ...):
...
The code would look something like this:
def singledispatch(func, argPosn=0):
...
# existing code here...
...
def wrapper(*args, **kw):
return dispatch(args[argPosn].__class__)(*args, **kw) #
instead of args[0]
def _dispatch_on(argname):
def decorate(func):
argPosn = # code to find argument position of argname for func
return dispatch(func, argPosn)
return decorate
singledispatch.on = _dispatch_on
So, it's just a few lines added, but of course additional doc, tests,
etc. would have to be added as well. (It also might be a good idea
for there to be some error checking in wrapper() to raise an
approriate TypeError if len(args)<=arg.)
More information about the Python-Dev
mailing list