字符串选项的 Python 3 类型提示

Vla*_*tin 10 python type-hinting

比方说,我有一个函数,它有一个与方法名称对应的字符串参数:

def func(method: str):
    if method not in ('simple_method', 'some_other_method'):
        raise ValueError('Unknown method')
Run Code Online (Sandbox Code Playgroud)

我可以添加所有可能支持的选项(字符串)作为此参数的类型提示吗?例如,像这样的东西(因为打字时没有 Str,所以不起作用):

from typing import Str

def func(method: Str['simple_method', 'some_other_method']):
    ...
Run Code Online (Sandbox Code Playgroud)

Owl*_*lzy 11

仅使用类型提示是不可能的,正确的方法应该是使用像这样的枚举

from enum import Enum
class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3
Run Code Online (Sandbox Code Playgroud)

一旦您拥有一个包含所有可能选择的枚举,您就可以提示该函数以仅接受您的自定义枚举。更多信息在这里

例子:

 from typing import NewType

 Colors = NewType('Colors', Color)
Run Code Online (Sandbox Code Playgroud)

  • 作为同时使用提示和枚举的人,枚举对于单个函数的简单选项来说可能有点过分了。 (3认同)