[Python-Dev] PEP 443 - Single-dispatch generic functions (original) (raw)

Éric Araujo merwok at netwok.org
Thu May 23 20:13:22 CEST 2013


Hi,

Thanks for writing this PEP. Blessing one implementation for the stdlib and one official backport will make programmers’ lives a bit easier :)

>>> @fun.register(int) ... def (arg, verbose=False): ... if verbose: ... print("Strength in numbers, eh?", end=" ") ... print(arg) ...

Does this work if the implementation function is called like the first decorated function? (I don’t know the proper terminology) e.g.

>>> @fun.register(int)
... def fun(arg, verbose=False):
...     if verbose:
...         print("Strength in numbers, eh?", end=" ")
...     print(arg)

The precedent is 2.6+ properties, where prop.setter mutates and returns the property object, which then overwrites the previous name in the class dictionary.

* the current implementation relies on _mro_ alone, making it incompatible with Abstract Base Classes' register()/unregister() functionality. A possible solution has been proposed by PJE on the original issue for exposing pkgutil.simplegeneric as part of the functools API [#issue-5135].

Making generic functions work with ABCs sounds like a requirement to me, as ABCs are baked into the language (isinstance). ABCs and interfaces (i.e. zope.interface) are really neat and powerful.

* the dispatch type is currently specified as a decorator argument. The implementation could allow a form using argument annotations. This usage pattern is out of scope for the standard library [#pep-0008]. However, whether this registration form would be acceptable for general usage, is up to debate.

+1 to passing the type as argument to the decorator and not supporting annotations. It’s simple and works.

Question: what happens if two functions (say in two different modules) are registered for the same type?



More information about the Python-Dev mailing list