我正在尝试创建一个在 python 中输入的惰性容器:
T = TypeVar("T")
class Lazy(Generic[T]):
...
a = Lazy[str]
issubclass(a, Lazy)
但是,我在最后一行得到了
TypeError: issubclass() arg 1 must be a class
。我不知道其背后的原理,但文档中提到了。
来自PEP 484:
请注意特殊类型构造,例如 Any、Union 和 type 使用 TypeVar 定义的变量仅在类型中受支持 注解上下文,而 Generic 只能用作基类。全部 其中(除了未参数化的泛型)将引发 TypeError 如果 出现在 isinstance 或 issubclass 中。
Lazy
是通用的,当它被加下标时,它就变成了<class 'typing._GenericAlias'>
,显然不被接受作为issubclass()
的第一个参数。
对于
isinstance
或 issubclass
,只需使用泛型类的未参数化版本。