Python Typing: данный набор значений - PullRequest
1 голос
/ 23 октября 2019

Я хочу, чтобы параметр метода был одним из конечного набора допустимых значений. В общем, я хотел бы иметь typing эквивалент следующего минимального примера:

valid_parameters = ["value", "other value"]

def typed_method(parameter):
    if not parameter in valid_parameters:
        raise ValueError("invalid parameter")

Я уже проверил typing, но мне не удалось найти решение. Может быть, я просто не смог полностью понять документацию. Есть ли такое решение? Можно ли его создать?

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Эта функция имеет , просто была представлена ​​в Python 3.8: typing.Literal. Подробности см. PEP 586 .

Пример:

def typed_method(parameter: Literal["value", "other value"]):
    pass
0 голосов
/ 23 октября 2019

Я хочу, чтобы параметр метода был одним из конечного набора допустимых значений

Использовать Enum

from enum import Enum


class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3


def handle_color(color):
    if not isinstance(color, Color):
        raise ValueError('Not a color')
    print(color)


handle_color(Color.GREEN)
handle_color('something')
...