如何检查未实例化的类/类型是否可迭代?
检查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
相关产品推荐
相关产品推荐

