从何处导入DataclassInstance以解决mypy类型检查报错?
数据类类型注解的mypy报错与DataclassInstance导入问题
我之前用自定义的DataclassProtocol为接收数据类类型的函数参数添加注解,代码如下:
import dataclasses from typing import Type class DataclassProtocol(Protocol): """Type annotation for dataclass type object.""" __dataclass_fields__: Dict def f(dcls: Type[DataclassProtocol]): return dataclasses.fields(dcls)
近期用mypy检查时出现报错:
error: Argument 1 to "fields" has incompatible type "type[DataclassProtocol]"; expected "DataclassInstance | type[DataclassInstance]" [arg-type]
看起来现在需要使用DataclassInstance来做注解,但我找不到它的导入路径,请问该从何处导入?
解决方案
DataclassInstance是用于类型检查的专用类型,有两种常见导入方式:
从
mypy_extensions导入
这是mypy官方提供的扩展模块,需先安装:pip install mypy-extensions导入后修改代码:
import dataclasses from typing import Type from mypy_extensions import DataclassInstance def f(dcls: Type[DataclassInstance]): return dataclasses.fields(dcls)从
typing_extensions导入
若你已在用typing_extensions兼容多版本Python,也可从这里导入:pip install typing-extensions导入代码:
from typing_extensions import DataclassInstance
另外,如果你不想依赖第三方库,也可以调整自定义Protocol的定义,让它与mypy期望的DataclassInstance结构对齐,但直接导入专用类型是更简洁且不易出错的方案。
内容的提问来源于stack exchange,提问作者JS S
相关产品推荐
相关产品推荐

