Можно указать, что все позиционные аргументы должны быть одного или другого типа аргумента?

Я использовал дерьмо из модуля typing, потому что я обнаружил, что это делает возвращение к чтению и пониманию моего кода примерно в 3 раза проще. Это также делает pycharm вдвое полезнее.

Я знаю, что для указания типа одиночных позиционных аргументов OR можно сделать это:

def f(*args: int = 0) -> None:
    #  integers are expected for args
    pass

Кроме того, если позиционные аргументы могут быть нескольких типов, вы можете использовать Union для обработки этого случая:

from typing import Union

def f(*args: Union[str, int]) -> None:
    #  integers OR strings are expected for args
    pass

Мой вопрос: есть ли способ сообщить средству проверки типов, чтобы убедиться, что args являются ЛИБО ВСЕМИ int, ИЛИ ВСЕМИ str, но не смесью обоих, но не ограничиваясь ТОЛЬКО int или ТОЛЬКО str?


person Rick supports Monica    schedule 05.02.2018    source источник
comment
Мне просто пришло в голову, что это может быть вариант использования для перегрузки...   -  person Rick supports Monica    schedule 06.02.2018


Ответы (1)


Я почти уверен, что вы хотите использовать TypeVar:

T = typing.TypeVar('T', int, str) # can be either int or str, but not both in a single call

def f(*args: T) -> None:
    pass
person Blckknght    schedule 05.02.2018
comment
имеет смысл! даже не думал так делать. - person Rick supports Monica; 06.02.2018