目前在用 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 又觉得不严谨。应该如何取舍?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.