1import inspect 2from functools import singledispatch 3 4 5def assign_signature(func): 6 # This is intended to cover more complex signature-rewriting decorators. 7 func.__signature__ = inspect.signature(func) 8 return func 9 10 11@singledispatch 12def func(arg, kwarg=None): 13 """A function for general use.""" 14 pass 15 16 17@func.register(int) 18def _func_int(arg, kwarg=None): 19 """A function for int.""" 20 pass 21 22 23@func.register(str) 24@assign_signature 25def _func_str(arg, kwarg=None): 26 """A function for str.""" 27 pass 28