Trying and enjoying the functools.singledispatch