如何在Python类型注解中避免重复字面量定义
如何仅定义一次字面量值,同时用于常量和函数注解类型?
挑战
定义用于函数注解的字面量及其类型,但仅编写一次字面量值。
实际场景
端口的分配状态包含以下几种情况:
- 分配单个VLAN
- 分配VLAN列表
- 设为trunk
- 未分配
需完成以下定义:
- 声明
"trunk"、"unallocated"两个常量 - VLAN类型定义为:
class VlanId(int): ... - 为两个函数添加类型注解:
get_init_port_value():返回单个VlanId实例或"trunk"字面量get_port_status(port):返回端口当前的所有可能分配状态
已尝试的5种方案
- Try1:分别定义常量值和对应的
Literal类型,功能可行但存在代码冗余 - Try2:使用
Final类型标注常量,效果和Try1类似,仍无法避免冗余 - Try3:尝试从常量直接推导类型,但
Type[...]仅支持识别类类型,无法处理字面量值,尝试失败 - Try4:用
Literal包裹已定义的常量,但类型检查器不支持Literal接受常量参数,尝试失败 - Try5:用枚举(
enum.Enum)管理非VLAN的分配值,实现了字面量仅编写一次,但针对单个值的场景显得过于冗余
需求
寻求一种无需单独显式定义Literal类型的方法,直接从已声明的常量获取其对应的类型注解(此需求与“从Python Literal类型运行时获取字面量”的需求恰好相反)。
内容的提问来源于stack exchange,提问作者Netcreator
相关产品推荐
相关产品推荐

