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

如何检查未实例化的类/类型是否可迭代?

检查GenericAlias原始类是否可迭代(无需实例化)

针对你提到的场景,拿到list[int]这类GenericAlias的原始类后,可以通过以下两种方式在Python 3.10中检查该类是否可迭代:

方法1:使用抽象基类的issubclass判断

collections.abc.Iterable作为抽象基类,支持通过issubclass直接判断类是否符合可迭代的约定(即使类没有显式继承它,只要实现了__iter__方法就会返回True):

from typing import get_origin
import collections.abc

# 示例:获取GenericAlias的原始类
alias = list[int]
origin_cls = get_origin(alias)  # 得到 <class 'list'>

# 检查是否可迭代
is_iterable = issubclass(origin_cls, collections.abc.Iterable)
print(is_iterable)  # 输出 True

方法2:直接检查类是否实现了__iter__方法

可迭代类的核心特征是实现了__iter__魔术方法,因此可以直接通过hasattr判断类是否拥有该方法:

from typing import get_origin

alias = list[int]
origin_cls = get_origin(alias)

is_iterable = hasattr(origin_cls, '__iter__')
print(is_iterable)  # 输出 True

注意事项

  • 两种方法都无需实例化类,直接作用于原始类对象即可。
  • 优先推荐方法1,因为它严格遵循Python的可迭代协议抽象定义,比直接检查方法更鲁棒(比如避免误判那些存在__iter__但不符合协议的类)。

内容的提问来源于stack exchange,提问作者matt.baker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:39:28