我在遗留代码中有一些要点(python库:music 21),它使用了大量的重载和泛型变量来显示/typecheck一个t.Sequence中的所有子元素都属于一个特定的类型。有很多@overload
装饰器来显示不同的属性如何返回不同的值。在这一点上,这些函数可以正常工作,但是过去的一些PR破坏了其他开发者所需要的内省。
代码经过了广泛的测试,但是mypy和PyCharm等检查器的推断类型没有经过测试。是否有方法对推断类型进行测试?类似于:
SomeClassType = typing.TypeVar('SomeClassType', bound='SomeClass')
class SomeClass:
pass
class DerivedClass(SomeClass):
pass
class MyIter(typing.Sequence[typing.Type[SomeClassType]]):
def __init__(self, classType: typing.Type[SomeClassType]):
self.classType = classType
# ------- type_checks.py...
derived_iterator = MyIter(DerivedClass)
# this is the line that I don't know exists...
typing_utilities.assert_reveal_type_eq(derived_iterator,
MyIter[DerivedClass])
# or as a string 'MyIter[DerivedClass]'
mypy的reveal_type
看起来在这里会很有帮助,但是我似乎找不到任何到测试系统的集成,等等。谢谢!
1条答案
按热度按时间jogvjijk1#
您要查找的函数实际存在。但它的名称不同:
首先,定义类型测试:
然后对文件运行mypy:
mypy --strict --warn-unused-ignores
.失败的阳性测试仅报告为mypy错误,失败的阴性测试报告为"未使用"类型:忽略"注解"。
软件包
typing_extensions
与mypy一起安装。来源:https://typing.readthedocs.io/en/latest/source/quality.html