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

Python typing如何在泛型中使用Literal实现带长度的Array类型标注

需求可以实现

你可以结合 Python 类型系统的 Literal 字面量类型和多参数泛型完成该设计,主流类型检查工具(mypy、pyright)都支持该用法。

实现步骤

  1. 定义泛型参数
    需要新增一个绑定为int类型的类型参数,用于接收长度字面量:
import typing
from typing import TypeVar, Generic, Literal

# 元素类型泛型参数
T = TypeVar('T')
# 数组长度泛型参数,限定必须是int类型
L = TypeVar('L', bound=int)

class Array(Generic[T, L]):
    def __init__(self, length: L, default_val: T | None = None):
        self._length: L = length
        self._data: list[T] = [default_val] * length if default_val else []
    
    # 可自行补充其他数组操作方法
    def __getitem__(self, index: int) -> T:
        return self._data[index]
  1. 类型标注用法
  • Python 3.8 ~ 3.10 版本需要显式套Literal标注长度:
# 标注长度为5的int类型数组
fixed_size_array_of_five_ints: Array[int, Literal[5]]
# 标注长度为4的int类型数组
fixed_size_array_of_four_ints: Array[int, Literal[4]]
  • Python 3.11+ 版本支持直接写入数字字面量作为类型参数,写法和你要求的完全一致:
fixed_size_array_of_five_ints: Array[int, 5]
fixed_size_array_of_four_ints: Array[int, 4]

补充说明

类型检查阶段会严格校验数组长度的匹配性,比如你把长度为4的Array[int,4]赋值给Array[int,5]类型的变量时,类型检查工具会直接抛出错误。如果需要运行时校验长度,可以在类的初始化、赋值等方法中增加长度校验逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 17:45:05