Сейчас использую что-то вроде:
def get_signature(func, *args, **kwargs):
args_str = ", ".join(map(str, args))
kwargs_str = ", ".join(f'{key}={val}' for key, val in kwargs.items())
signature = ', '.join(s for s in [args_str, kwargs_str] if s)
return f'{func.__qualname__}({signature})'
def f():...
print(get_signature(f)) # f()
print(get_signature(f, 1, a=1)) # f(1, a=1)
Способ довольно длинный и имеющий кучу недостатков вроде отсутствия валидации аргументов.
Нет ли какого-то встроенного способа достичь желаемого?