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

如何为键为特定元组、值已知的字典添加Type Hint?

为特定元组键的字典添加精确类型提示

首先修正你代码里的语法问题:去掉class_map后的多余冒号,同时给字典键值对添加逗号:

class A:
    pass

class B:
    pass

class_map = {
    (str,): A,
    (int,): B
}

some_cls = class_map[(str,)]

接下来是两种类型提示方案:

方案1:基础字典类型提示

适合只需要限定键的可能取值和值的类型范围的场景,需要从typing模块导入Dict、Literal和Type(Python3.8+可用,Python3.10+可直接用|替代Union):

from typing import Dict, Literal, Type

class A:
    pass

class B:
    pass

# 限定键只能是(str,)或(int,),值是A或B的类类型
class_map: Dict[Literal[(str,), (int,)], Type[A] | Type[B]] = {
    (str,): A,
    (int,): B
}

some_cls = class_map[(str,)]  # 类型检查工具会识别为Type[A] | Type[B]

方案2:精确类型推断的协议提示

如果需要让类型检查工具准确识别每个键对应的具体类类型(比如class_map[(str,)]明确返回Type[A]),可以用Protocol定义自定义映射协议:

from typing import Protocol, Type, Literal

class A:
    pass

class B:
    pass

# 定义协议,指定每个键对应的返回类型
class ClassMapProtocol(Protocol):
    def __getitem__(self, key: Literal[(str,)]) -> Type[A]: ...
    def __getitem__(self, key: Literal[(int,)]) -> Type[B]: ...

class_map: ClassMapProtocol = {
    (str,): A,
    (int,): B
}

some_cls = class_map[(str,)]  # 类型检查工具会精确推断为Type[A]

这两种方案都能满足你通过已知基类元组查找对应定义类的场景,后者的类型提示更精确,适合需要严格类型检查的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:07:53