Python使用Generic时issubclass()报错:arg1必须是类的解决咨询
问题原因与解决方法
错误原因
Lazy[str]并不是一个类,它是泛型类Lazy绑定了类型参数str后生成的参数化泛型对象。issubclass()函数要求第一个参数必须是类对象,而参数化泛型不属于类范畴,因此抛出TypeError。
解决方法
根据需求分两种场景处理:
1. 检查是否为Lazy的参数化泛型
如果要判断a是不是Lazy绑定类型参数后的产物,Python 3.8+可以用typing.get_origin函数:
from typing import TypeVar, Generic, get_origin T = TypeVar("T") class Lazy(Generic[T]): ... a = Lazy[str] print(get_origin(a) is Lazy) # 输出: True
Python 3.7及以下版本可直接访问非官方但可用的__origin__属性:
print(a.__origin__ is Lazy) # 输出: True
2. 若需创建可被issubclass识别的类
如果确实需要让Lazy[str]成为类(用于类继承检查等场景),可以通过自定义元类结合泛型实现,但这种需求极少。通常泛型的参数化版本仅用于类型标注,无需作为类处理。
内容的提问来源于stack exchange,提问作者George Ogden
相关产品推荐
相关产品推荐

