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

如何将常量对象用作字面量类型提示?

解决方案

有两种方法可以实现你的需求,既保证NO_RESULT是唯一对象,又能在类型提示中准确标注:

方法一:用Final标注常量配合Literal

这种方法直接基于你原有的实现,通过Final告诉类型检查器该常量的值不会被修改,从而让Literal[NO_RESULT]被识别为这个唯一对象的字面量类型:

from typing import Final, Literal, Hashable

# 用Final标注,确保NO_RESULT是不可变的唯一实例
NO_RESULT: Final[object] = object()

def foo() -> Hashable | Literal[NO_RESULT]:
    try:
        result: Hashable = res()
        return result
    except:
        return NO_RESULT

说明:主流类型检查器(如mypy >= 0.910、pyright)都支持这种写法,语义上完全匹配“唯一对象”的需求,不会出现类型实例的歧义。

方法二:使用单例枚举类

通过枚举类创建唯一的枚举成员,枚举成员本身就是单例,且Literal支持直接引用枚举成员作为字面量类型:

from enum import Enum
from typing import Literal, Hashable

# 定义私有枚举类,确保只有一个成员
class _NoResult(Enum):
    VALUE = object()

# 对外暴露唯一实例
NO_RESULT = _NoResult.VALUE

def foo() -> Hashable | Literal[_NoResult.VALUE]:
    try:
        result: Hashable = res()
        return result
    except:
        return NO_RESULT

说明:枚举的机制天然保证了NO_RESULT是唯一的,类型提示中的Literal[_NoResult.VALUE]能准确表示返回的是这个特定对象,完全符合你的语义要求。

内容的提问来源于stack exchange,提问作者Daraan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:42:38