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

如何正确子类化dict使MyPy将其识别为泛型类型?

让自定义Dict子类支持泛型类型参数的正确方式

要解决MyPy报错的问题,你需要让MyDict成为显式的泛型类,而非简单继承普通的dict——普通dict本身不是泛型类,直接继承它的子类默认不支持传入类型参数。

正确实现方式

先定义泛型类型变量,再让MyDict继承泛型版本的字典类并关联这些类型变量:

兼容Python 3.8及更早版本

from typing import Generic, TypeVar, Dict

# 定义泛型类型变量,分别代表键和值的类型
K = TypeVar('K')
V = TypeVar('V')

class MyDict(Dict[K, V], Generic[K, V]):
    pass

Python 3.9+ 简化写法(使用标准库泛型语法)

from typing import Generic, TypeVar

K = TypeVar('K')
V = TypeVar('V')

class MyDict(dict[K, V], Generic[K, V]):
    pass

为什么之前的尝试无效

  • 直接继承普通dict:普通dict没有泛型参数定义,MyPy无法识别它支持类型参数。
  • 继承typing.Dict但未绑定类型变量:如果只写class MyDict(Dict): pass,Dict在这里是无类型参数的形式,MyPy依然不会将MyDict视为泛型类。必须显式关联K和V这两个类型变量,让MyPy明确类支持传入键、值两种类型参数。

测试验证

现在再使用MyDict[str, int]就可以正常通过MyPy检查了:

my_var: MyDict[str, int] = {'a': 1, 'b': 2}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:45:03