Right now, an example for single dispatch would be:
from functools import singledispatch
@singledispatch def fun(arg, verbose=True): if verbose: print("Let me just say,", end=" ") print(arg)
@fun.register(int) def _(arg, verbose=True): if verbose: print("Strength in numbers, eh?", end=" ") print(arg)
@fun.register(list) def _(arg, verbose=True): if verbose: print("Enumerate this:") for i, elem in enumerate(arg): print(i, elem)
But this makes a useless _ function, that should either be deleted or ignored. For properties, a common pattern is this:
class Foo: @property def bar(self): return self._bar
@bar.setter
def bar(self, value):
self._bar = value
So I'm suggesting that @function.register for single dispatch functions returns the same function, so you would end up with something like:
@singledispatch def fun(arg, verbose=True): if verbose: print("Let me just say,", end=" ") print(arg)
@fun.register(int) def fun(arg, verbose=True): if verbose: print("Strength in numbers, eh?", end=" ") print(arg)
And to get back the old behaviour, where you can get the function being decorated, just call it afterwards:
@singledispatch def fun(arg, verbose=True): if verbose: print("Let me just say,", end=" ") print(arg)
def used_elsewhere(arg, verbose=True): if verbose: print("Strength in numbers, eh?", end=" ") print(arg)
fun.register(int)(used_elsewhere)
But this goes against what a single-dispatch function is, so I think this is a minor enough use case to not worry about.