Я использую новый модуль Python 3.5 typing, и он был радостным.
Мне было интересно, как можно указать тип на основе точного строкового литерала. Например, функция гарантированно возвращает одну из четырех строк — «Север», «Запад», «Восток», «Юг» — как мы можем выразить это как переменную определенного типа, а не просто str
.
Я просмотрел документацию, нашел тип Union
и функцию TypeVar
, но не смог найти ответ.
Пример функции, выражающей эту проблему:
def compute_quadrant(x: int, y: int) -> str:
if x > 0 and y > 0:
return 'I'
elif x < 0 and y > 0:
return 'II'
elif x < 0 and y < 0:
return 'III'
elif x > 0 and y < 0:
return 'IV'
Вместо того, чтобы просто возвращать str
, я хотел бы вернуть более конкретный тип, который является одним из четырех значений — "I"
, "II"
, "III"
или "IV"
.
В Typescript можно сделать: type Quadrant = "I" | "II" | "III" | "IV"
— есть ли хороший сахар Python для этого варианта использования с модулем typing
?
enum
подходит идеально. - person max   schedule 17.04.2017