Сохранять типы псевдонимов простыми в Python документации? - PullRequest
0 голосов
/ 02 февраля 2020

Я пытаюсь использовать модуль typing для документирования своего пакета Python, и у меня есть несколько ситуаций, когда несколько различных типов допустимы для параметра функции. Например, вы можете передать число, объект Envelope (один из классов в моем пакете) или список чисел, из которых составлен конверт, или список списков чисел, из которых построен конверт. Поэтому я создаю псевдоним типа следующим образом:

NumberOrEnvelope = Union[Sequence[Real], Sequence[Sequence[Real]], Real, Envelope]

Затем я пишу функцию:

def example_function(parameter: NumberOrEnvelope):
    ...

И это выглядит великолепно для меня. Однако, когда я создаю документацию с использованием Sphinx, я получаю эту ужасно нечитаемую сигнатуру функции:

example_function (параметр: Union [Sequence [numbers.Real], Sequence [Sequence [numbers.Real] ], numbers.Real, remavelope.envelope.Envelope])

То же самое и с подсказками, которые появляются, когда я начинаю пытаться использовать функцию в PyCharm.

Is есть какой-то способ, которым я могу оставить его как NumberOrEnvelope. В идеале это также будет ссылаться в документации на разъяснение, что такое «NumberOrEnvelope», хотя даже если бы этого не произошло, это было бы намного лучше, чем то, что появляется сейчас.

Заранее спасибо!

1 Ответ

0 голосов
/ 02 февраля 2020

РЕДАКТИРОВАТЬ: К сожалению, это не совсем работает.

Оказывается после небольшого поиска, я нашел то, что искал. Вместо:

NumberOrEnvelope = Union[Sequence[Real], Sequence[Sequence[Real]], Real, Envelope]

Я обнаружил, что вы можете создать свой собственный составной тип, который делает то же самое:

NumberOrEnvelope = TypeVar("NumberOrEnvelope", Sequence[Real], Sequence[Sequence[Real]], Real, Envelope)

Это отображается в документации как "NumberOrEnvelope", как я и хотел .

...