我正在编写一个谓词函数。除此之外,它可以采用与
isinstance()
兼容的参数,这样如果您调用 my_pred(val, types)
,它将返回 isinstance(val, types)
。
但是,我不确定在定义谓词时如何正确输入第二个参数。
isinstance()
的第二个参数似乎是名为 _ClassInfo
的 MyPy 内部类型。有没有办法访问该类型? 我应该尝试访问它吗?或者我应该放弃并输入 Any
?
(我无法手动正确编写类型,因为它是递归的,并且 MyPy 尚未正确支持递归类型;
_ClassInfo
可以是 Type
,或 tuple[_ClassInfo]
。)
因此,这些存根来自
typeshed
,这里有一个链接,指向 this 的定义位置,当前您拥有的位置:
if sys.version_info >= (3, 10):
_ClassInfo: TypeAlias = type | types.UnionType | tuple[_ClassInfo, ...]
else:
_ClassInfo: TypeAlias = type | tuple[_ClassInfo, ...]
def isinstance(__obj: object, __class_or_tuple: _ClassInfo) -> bool: ...
所以它看起来是使用递归定义。*,mypy 自 v0.990/v0.991 以来对其有一些有限的支持:
https://github.com/python/mypy/pull/13297
虽然它并不完美,但我想它可以处理这种情况。