@overload((str, int))
def f(a, b):
    return a * b

@overload((int, int))
def f(a, b):
    return a + b
print(f('a', 2))
print(f(4, 2))

@overload((str,), (('foo', int), ('bar', float)))
def g(a, foo, bar):
    return foo * a + str(bar)

@overload((str,), (('foo', float), ('bar', float)))
def g(a, foo, bar):
    return a + str(foo * bar)
print(g('a', foo=7, bar=4.4))
print(g('b', foo=7.0, bar=4.4))
Декоратор для перегрузки в Python