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

Python如何对Number的子类类型(而非数值实例)实现类型标注?

解决方案

你要实现的类型标注完全可以通过Type的泛型写法实现,无需额外运行时检查,静态类型检查器(如mypy、pyright)可直接完成校验。

核心写法

你需要的标注是Type[Number],语义为「所有Number抽象基类的子类的类对象」,恰好覆盖int、float、numpy数值dtype等场景。

Python 3.8及更早版本

from numbers import Number
from typing import Type

def foo(bar: Type[Number]):
    print(bar)

Python 3.9及更高版本

Python 3.9支持PEP 585内置泛型,可以直接用小写的type代替导入的Type,写法更简洁:

from numbers import Number

def foo(bar: type[Number]):
    print(bar)

效果验证

以下调用都会被静态检查器判定为合法:

foo(int)
foo(float)
import numpy as np
foo(np.uint8)

如果传入非数值类型(如foo(str)),静态检查器会直接抛出类型错误,无需在代码中添加assert运行时校验。

补充说明

你之前寻找的NumberType实际不需要单独定义,Type[Number]就是对应需求的标准标注方式,numbers.Number作为抽象基类已经涵盖了所有符合数值协议的类型,包括Python内置类型和第三方库(如numpy)的数值类型。


内容的提问来源于stack exchange,提问作者s-m-e

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:09:00