@mkone112
Начинающий питонист.

Как объединить сигнатуры функций чтобы help отображал несколько вариантов?

Имеется несколько перегруженных функций:
@singledispatch
def get():
    """main docstring"""
    ...

@get.register(str)
def _get_str(s):
    """str docstring"""
    print('str')\

@get.register(int)
def _get_int(i):
    print('int')

get(1)  # int
get('s')  # str

Но help выводит только одну сигнатуру:
help(get)
Help on function get in module __main__:

get()
    main docstring

Я могу скопировать сигнатуру одной реализации в другую:
get.__signature__ = inspect.signature(_get_str)
help(get)

Help on function get in module __main__:

get(s)
main docstring

Но я бы хотел видеть в help все сигнатуры и строки документации разом, примерно так:
Help on function get in module __main__:

get()
    main docstring
get(s)
    str docstring
get(i)

Как это можно сделать?
  • Вопрос задан
  • 101 просмотр
Решения вопроса 1
@mkone112 Автор вопроса
Начинающий питонист.
@singledispatch
def get(date):
    """main docstring"""
    print('main')

@get.register(datetime.date)
def _get_str(s):
    """str docstring"""
    print('date')

get.__doc__ = '\n'.join([
    get.__doc__,
    f'\b\b{get.__name__}{inspect.signature(_get_str)}',
    _get_str.__doc__,
])

Это работает, хотя и имеется небольшая проблема с отступами.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы