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

2024-04-24

在我从 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__ https://github.com/python/typing/issues/136这也引入了这一变化。这提交消息 https://github.com/python/typing/commit/7baf6fe2a6d96ab09c807aac174650baa35d15dd还参考了如何isinstance/subclass支票将提高TypeErrors:

Using isinstance() or issubclass() raises TypeError几乎所有事情。但也有例外:[...]

You can比较时不指定泛型类型的包含类型,即:

isinstance(list, typing.List[int])

但这是你能做的最好的事情。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mypy 在参数化泛型中 isinstance 和 issubclass 从 python 3.5 到 3.6 的差异 的相关文章

随机推荐