MyPy:如何输入将转发到 isinstance() 的参数

问题描述 投票:0回答:1

我正在编写一个谓词函数。除此之外,它可以采用与

isinstance()
兼容的参数,这样如果您调用
my_pred(val, types)
,它将返回
isinstance(val, types)

但是,我不确定在定义谓词时如何正确输入第二个参数。

isinstance()
的第二个参数似乎是名为
_ClassInfo
的 MyPy 内部类型。有没有办法访问该类型? 我应该尝试访问它吗?或者我应该放弃并输入
Any

(我无法手动正确编写类型,因为它是递归的,并且 MyPy 尚未正确支持递归类型;

_ClassInfo
可以是
Type
,或
tuple[_ClassInfo]
。)

python python-3.x mypy
1个回答
0
投票

因此,这些存根来自

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

虽然它并不完美,但我想它可以处理这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.