Как жестко закодировать допустимые значения только один раз как для проверки типа (TypeAlias), так и для проверки во вреPython

Программы на Python
Anonymous
Как жестко закодировать допустимые значения только один раз как для проверки типа (TypeAlias), так и для проверки во вре

Сообщение Anonymous »

Предположим, у меня есть функция, которая допускает только 2 ввода, поэтому я бы сделал только проверку статического типа:

Код: Выделить всё

Letter: TypeAlias = Literal["a", "b"]

def my_func(letter: Letter)->str:
...
но я все равно хочу, чтобы моя функция проверяла значение во время выполнения с помощью чего-то вроде:

Код: Выделить всё

if letter not in ["a", "b"]:
raise ValueError("must enter a or b")
Теперь у меня есть два места, где ["a", "b"] должны быть жестко закодированы, чего я бы хотел избежать.
Я попробовал несколько вещей:

Код: Выделить всё

"a" in Letter
# returns False

Letter: TypeAlias = Literal(VALID_LETTERS:=["a", "b"])
# raises Literal can't be instantiate.

VALID_LETTERS=["a", "b"]
Letter: TypeAlias = Literal[VALID_LETTERS]
# Variable not allowed in type expression
Я также рассматривал возможность использования Enum, так как это поставило бы галочку о сохранении разрешенных значений для целей проверки типа и проверки времени выполнения в одном и том же месте, но это вынуждает пользователей функции импортировать класс Enum, чего я не хочу. Он также не отображает всплывающее окно с подсказкой по вводу, поэтому в данном случае это нехорошо для меня.
Есть ли способ, чтобы мои допустимые значения были жестко запрограммированы только один раз для проверки обоих типов и проверка времени выполнения?

Подробнее здесь: https://stackoverflow.com/questions/790 ... ypealias-a

Вернуться в «Python»