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

如何使用mypy标注包含自定义numpy dtype的数组?

解决自定义numpy dtype的类型注解问题

你遇到的问题是因为npt.NDArray的类型参数需要的是类型注解层面的dtype类型,而非运行时的np.dtype实例。直接传入MY_DTYPE(一个运行时实例)会让mypy无法识别,所以需要用类型别名来关联自定义dtype的类型信息。

正确的实现方式

import numpy as np
import numpy.typing as npt
from typing import TypeAlias

# 1. 定义结构化dtype的规格描述
VERSION_DTYPE_SPEC = [("major", "u2"), ("minor", "u2"), ("patch", "u2")]

# 2. 创建运行时使用的dtype实例
VERSION_DTYPE = np.dtype(VERSION_DTYPE_SPEC)

# 3. 定义类型注解专用的类型别名(关联dtype的类型信息)
VersionDType: TypeAlias = np.dtype[VERSION_DTYPE_SPEC]

# 示例数组
my_array = np.array([(1, 2, 3), (4, 5, 6)], dtype=VERSION_DTYPE)

# 函数注解使用类型别名
def print_entries(array_var: npt.NDArray[VersionDType]) -> None:
    """Print array entries."""
    for row in array_var:
        print(row)

关键说明

  • VersionDType作为类型别名,本质是告诉mypy这个类型对应我们自定义的结构化dtype,而非直接传入运行时的实例。
  • 拆分dtype规格、运行时实例、类型别名三个部分,既满足运行时的数组创建需求,又能让静态类型检查工具(如mypy)正确识别类型约束。

如果不想额外定义类型别名,也可以直接在注解中写dtype的类型信息,但代码会比较冗长:

def print_entries(array_var: npt.NDArray[np.dtype[([("major", "u2"), ("minor", "u2"), ("patch", "u2")],)]]) -> None:
    ...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 23:07:27