TypeError: issubclass() arg 1 必须是 Python 中泛型类型的类

问题描述 投票:0回答:1

我正在尝试创建一个在 python 中输入的惰性容器:

T = TypeVar("T")

class Lazy(Generic[T]):
    ...

a = Lazy[str]
issubclass(a, Lazy)

但是,我在最后一行得到了

TypeError: issubclass() arg 1 must be a class

帮助解释这一点以及我如何解决它将不胜感激。

python typing
1个回答
0
投票

我不知道其背后的原理,但文档中提到了。

来自PEP 484

请注意特殊类型构造,例如 Any、Union 和 type 使用 TypeVar 定义的变量仅在类型中受支持 注解上下文,而 Generic 只能用作基类。全部 其中(除了未参数化的泛型)将引发 TypeError 如果 出现在 isinstance 或 issubclass 中。

Lazy
是通用的,当它被加下标时,它就变成了
<class 'typing._GenericAlias'>
,显然不被接受作为
issubclass()
的第一个参数。

对于

isinstance
issubclass
,只需使用泛型类的未参数化版本。

© www.soinside.com 2019 - 2024. All rights reserved.