如何输入常量并集

Pro*_*o Q 1 python type-hinting python-typing

我想做以下事情:

from typing import Union, Literal
YES = 1
NO = 0
ValidResponse = Union[Literal[YES], Literal[NO]]
Run Code Online (Sandbox Code Playgroud)

当然,Python 不会让我这样做,因为YESNO被认为是变量,而不是文字数字。

显然我可以做到ValidResponse = Union[Literal[1], Literal[0]],但作为稍后编辑此文件的程序员,为了更改YES使用的常量(例如YES = 'yes'),我需要在两个不同的地方更改它,这似乎很奇怪。

处理这种情况的最佳方法是什么?

jua*_*aga 5

你几乎肯定应该使用一个enum代替:

import enum

class ValidResponse(enum.Enum):
    YES = 1
    NO = 0
Run Code Online (Sandbox Code Playgroud)

现在您可以用作ValidResponse注释:

def foo(response: ValidResponse) -> whatever:
    # do something with response
Run Code Online (Sandbox Code Playgroud)