Python 类型注解, Enum 还是 str Literal?
資深大佬 : Contextualist 0
目前在用 attrs 做 TOML 配置的结构定义。遇到有些条目是联合类型,可以指定关键字也可以给具体数值,比如以下 TOML:
attr0 = 0.98 # 或者 #attr0 = "magicx"
那么这个条目的定义有两种写法,用 str Literal:
import attr from typing import Union, Literal @attr.s(auto_attribs=True) class Config: attr0: Union[float, Literal["magicx"]] ... config = parse_config() if config.attr0 == "magicx": ...
或者用 Enum:
import attr from typing import Union from enum import Enum class Attr0KW(Enum): MAGICX = "magicx" @attr.s(auto_attribs=True) class Config: attr0: Union[float, Attr0KW] ... config = parse_config() if config.attr0 is Attr0KW.MAGICX: ...
像这种只有一个关键字的,写个 Enum 又觉得过度封装了,但用 str Literal 又觉得不严谨。应该如何取舍?
大佬有話說 (2)