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

Python Typing中如何限制type类型参数仅为str、int类对象

解决方案

你可以通过两种类型标注方案实现需求,二者都对mypy有良好支持,不需要额外加assert判断:

方案1:使用泛型type标注(允许传入子类)

如果你允许接收str、int的子类作为参数,这是最符合Python类型标注规范的方案:

# Python 3.9+ 原生写法
def my_function(dtype: type[str] | type[int]):
    pass

# Python 3.8及更早版本写法,需要从typing导入对应工具
from typing import Type, Union
def my_function(dtype: Union[Type[str], Type[int]]):
    pass

该标注的含义为:dtype是一个类型对象,它对应的实例类型为str或int,正好匹配你要传入str/int类本身的需求,mypy会自动拦截不符合要求的传参:

  • 传str、int:类型检查通过
  • 传bool、list等其他类型对象:检查不通过
  • 传字符串、数字等类型实例:检查不通过

方案2:使用Literal标注(严格限制仅str/int本身)

如果你要求dtype只能是str、int两个类本身,连它们的子类都不能传入,可以用该方案:

from typing import Literal

def my_function(dtype: Literal[str, int]):
    pass

该方案会严格匹配字面量值为str或int的类型对象,任何子类、其他类型对象都会被mypy直接拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:45:03