Python如何实现支持numpy类型的同类型数值元组类型提示
解决方案
核心实现思路
通过带边界的泛型类型变量TypeVar约束元组所有元素为同一个数值类型,既能兼容所有符合numbers.Number协议的类型(包括Python原生数值、numpy数值类型),又能避免混合类型的问题。
代码示例
from numbers import Number from typing import Tuple, TypeVar # 定义泛型变量,上界为Number,所有符合数值协议的类型都可以作为T的实际类型 T = TypeVar('T', bound=Number) # 固定长度为3、所有元素为同一数值类型的元组类型提示 SameNumberTuple = Tuple[T, T, T]
用法说明
- 如果你需要适配任意长度的同数值类型元组,可将类型改写为
Tuple[T, ...] - 上述写法同时兼容MyPy等静态类型检查工具,以及typeguard运行时校验
- 如果你的检查工具无法自动识别numpy数值类型属于
Number的子类,可以将TypeVar的边界扩展为兼容numpy数值:import numpy as np from typing import Union T = TypeVar('T', bound=Union[Number, np.number]) - 特殊场景说明:由于Python中
bool是int的子类,默认会被识别为合法数值类型,如果需要排除bool类型,可以在运行时校验逻辑中额外增加类型判断过滤。
内容的提问来源于stack exchange,提问作者s-m-e
相关产品推荐
相关产品推荐

