gpt4 book ai didi

python - 参数化泛型中 isinstance 和 issubclass 从 python 3.5 到 3.6 的 mypy 差异

转载 作者:太空狗 更新时间:2023-10-30 00:05:27 26 4
gpt4 key购买 nike

在我从 python 3.5 升级到 python 3.6 之前,这是有效的:

import typing
issubclass(list, typing.List[int]) # returns True
isinstance([1, 2 ,3], typing.List[int]) # returns True

现在在 python 3.6 中,这两个都会引发以下异常:

TypeError: Parameterized generics cannot be used with class or instance checks

这是新的预期行为还是错误?如果我打算如何执行上面的代码在 python 3.6 中所做的检查?

最佳答案

这是有意为之的,您不应该将类与 typing 中定义的类型混合,至少,根据我的理解,这是它的要点。问题 #136 Kill __subclasscheck__ 中对此进行了大量讨论。这也引入了这个变化。 commit message还引用了 isinstance/subclass 检查将如何引发 TypeError:

Using isinstance() or issubclass() raises TypeError for almost everything. There are exceptions: [...]

可以在不指定泛型类型包含的类型的情况下进行比较,即:

isinstance(list, typing.List[int])

但那是你能做的最好的 afaik。

关于python - 参数化泛型中 isinstance 和 issubclass 从 python 3.5 到 3.6 的 mypy 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42027923/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com