【发布时间】:2022-01-14 08:18:14
【问题描述】:
我正在尝试就用户定义的类型提出isinstance 问题:ConstData = Union[int, str]:
from typing import Union, Optional
ConstData = Union[int, str]
def foo(x) -> Optional[ConstData]:
if isinstance(x, ConstData): # <--- this doesn't work
# if isinstance(x, (int, str)): <--- this DOES work ...
return x
return None
很遗憾,它不起作用:
$ mypy main.py
main.py:4: error: Parameterized generics cannot be used with class or instance checks
main.py:4: error: Argument 2 to "isinstance" has incompatible type "object"; expected "Union[type, Tuple[Union[type, Tuple[Any, ...]], ...]]"
Found 2 errors in 1 file (checked 1 source file)
有什么优雅的方法可以解决这个问题吗?
【问题讨论】:
-
@alex_noname 谢谢,确实相关。尽管如此,使用
if isinstance(x, get_args(ConstData)): return xmypy 无法推断x具有正确的返回类型。它抱怨它是Any -
我认为当 mypy 在 isinstance github.com/python/mypy/issues/11673 中添加对来自 PEP 604 的新样式 Union 的支持时,这将成为可能