Consider allow functools.singledispatch to work with typing.Union?

Julia's burgeoning popularity has renewed my interest in dynamic dispatch. It seems to me that many methods that have been written as a giant switch on types can more clearly be written using dynamic dispatch. It was prettty exciting to see that Python already has single dispatch built in, and that it supports type annotations! Would it be possible and desirable to extend it slightly to support Union types? --- In [1]: from functools import singledispatch In [3]: from typing import Any, Union In [4]: @singledispatch ...: def a(x: Any): ...: print("a") ...: In [5]: class X: pass In [6]: class Y: pass In [7]: @a.register ...: def _(x: Union[X, Y]): ...: print("b") ...: --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-7-b6a194bcade0> in <module> 1 @a.register ----> 2 def _(x: Union[X, Y]): 3 print("b") 4 ~/.pyenv/versions/3.8.5/lib/python3.8/functools.py in register(cls, func) 858 argname, cls = next(iter(get_type_hints(func).items())) 859 if not isinstance(cls, type): --> 860 raise TypeError( 861 f"Invalid annotation for {argname!r}. " 862 f"{cls!r} is not a class." TypeError: Invalid annotation for 'x'. typing.Union[__main__.X, __main__.Y] is not a class.
participants (1)
-
Neil Girdhar