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

Mypy校验numpy.reshape输入类型时报错的正确类型标注方法咨询

错误原因

你触发mypy报错的核心原因是test方法的第二个参数b的类型标注不符合ndarray.reshape的入参类型要求:
ndarray.reshape方法的第一个入参为目标形状,numpy类型存根定义的合法类型只有单个整数或整数组成的序列(如列表、元组),你当前将b标注为np.ndarray,没有匹配的重载实现,因此报错。

修改方案

根据你实际使用b的场景,有两种正确的标注方式:

场景1:b本身就是传递形状的整数/整数序列

直接修改b的类型标注即可,修改后代码如下:

import numpy as np
from typing import Union, Sequence, Literal

class TestClass():
    def test(self, a: np.ndarray, b: Union[int, Sequence[int]]):
        return a.reshape(b, order = 'F')

场景2:b确实是存储形状值的一维整数numpy数组

你需要先将numpy数组转换为Python序列类型再传入reshape,同时使用numpy.typing标注数组的具体类型,修改后代码如下:

import numpy as np
from typing import Union, Sequence, Literal
import numpy.typing as npt

class TestClass():
    def test(self, a: np.ndarray, b: npt.NDArray[np.int_]):
        # 将numpy数组转为元组后再作为形状参数传入
        return a.reshape(tuple(b), order = 'F')

如果需要进一步对order参数做更严格的类型限制,也可以将其显式标注为Literal['C', 'F', 'A']类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:54:00