Python 键入:给定的一组值

Python Typing: Given Set of Values

我想将方法​​的参数键入为一组有限的有效值之一。所以基本上,我想要 typing 相当于以下最小示例:

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

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

我已经检查了 typing,但我没有设法找到解决方案。也许我只是无法完全理解文档。有这样的解决方案吗?可以创建吗?

Python 3.8 中引入了此功能:typing.Literal. See PEP 586 了解详情。

示例:

def typed_method(parameter: Literal["value", "other value"]):
    pass

I want to type the parameter of a method to be one of a finite set of valid values

使用枚举

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')