如何为Python标准库array编写符合mypy要求的类型注解
报错原因
该报错属于mypy的正常类型检查提示,不是bug。array.array是存储同质固定类型元素的容器,创建时必须指定类型码(如'i'对应整数、'f'对应浮点数),因此mypy将其定义为泛型类型,要求在类型注解中明确元素的类型参数,才能执行完整的静态类型校验。
你当前的写法运行时无异常,是因为Python解释器本身不会校验类型注解的泛型参数,泛型参数仅对静态类型检查工具生效。
正确注解写法
1. 明确指定元素类型(推荐)
如果你的函数仅接收存储特定类型元素的array,Python 3.9+ 支持原生PEP 585泛型语法,直接在array后加方括号指定元素类型即可:
from array import array # 示例:仅接收存储int类型的array def foo(arr: array[int]) -> None: print(arr)
2. 兼容任意元素类型的array
如果函数逻辑不需要关心array的元素类型,可以用typing.Any作为泛型参数:
from array import array from typing import Any def foo(arr: array[Any]) -> None: print(arr)
3. Python 3.8及更早版本兼容写法
3.8及更早版本的标准库array不支持原生泛型语法,可以用typing.Sequence做兼容注解(array实现了序列协议):
from array import array from typing import Sequence, Any def foo(arr: Sequence[Any]) -> None: print(arr)
内容的提问来源于stack exchange,提问作者Yair M
相关产品推荐
相关产品推荐

