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

Python 3.10及以上是否有内置函数查询类型提示的可选性?

Python标准库中判断类型提示是否允许None值的方案

Python标准库中没有单个直接函数可以完成你要的需求,但可以通过typing模块提供的工具函数组合实现,完全基于标准库,无需自定义全新逻辑。

核心思路

所有允许None的类型提示(包括Optional[T]、Union[T, None]、int|None这类Python 3.10+的语法糖)本质都属于Union类型变体,且参数中包含type(None)。我们可以用以下两个标准库函数解析类型:

  • typing.get_origin():获取类型提示的原始构造器(比如Optional[int]和int|None的origin都是Union)
  • typing.get_args():获取类型提示的参数列表

实现代码

from typing import get_origin, get_args, Union, Optional
from dataclasses import dataclass, fields

def allows_none(type_hint) -> bool:
    origin = get_origin(type_hint)
    # 处理Union/Optional/|None这类情况
    if origin is Union:
        return type(None) in get_args(type_hint)
    # 单独判断类型就是None的情况
    return type_hint is type(None)

# 测试你的示例类
@dataclass
class A:
    foo : Optional[int] = None
    bar : int|None = None
    baz : Union[int, float, None] = None
    x : int = 1

# 验证结果
for field in fields(A):
    print(f"{field.name}: {allows_none(field.type)}")

输出结果

foo: True
bar: True
baz: True
x: False

这个实现完全依赖Python标准库的工具函数,覆盖了你需要的所有场景,无需自己从头解析类型语法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:58:12