You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python类型注解中避免重复字面量定义

如何仅定义一次字面量值,同时用于常量和函数注解类型?

挑战

定义用于函数注解的字面量及其类型,但仅编写一次字面量值。

实际场景

端口的分配状态包含以下几种情况:

  • 分配单个VLAN
  • 分配VLAN列表
  • 设为trunk
  • 未分配

需完成以下定义:

  1. 声明"trunk"、"unallocated"两个常量
  2. VLAN类型定义为:class VlanId(int): ...
  3. 为两个函数添加类型注解:
    • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 05:27:06