Python自定义Generic泛型类缺构造返回注解时mypy漏检类型不匹配问题
现象原因
这是mypy的默认类型检查规则直接导致的:
- mypy默认会跳过完全没有任何类型注解的函数/方法的类型检查,将这类代码识别为动态类型逻辑,不执行任何静态类型校验。
- 你给
__init__方法加的-> None虽然从Python语法层面看,对构造方法的返回值没有实际影响,但它是一个明确的类型注解标记,会告知mypy这个方法需要纳入静态类型检查范围。
对应到你的代码场景:
- 保留
-> None时,mypy会完整检查__init__内部的赋值逻辑:你把float类型的8.9赋值给类型为泛型参数Data的self.d,当你实例化State[int]()时Data对应的实际类型是int,自然会抛出类型不匹配的错误。 - 移除
-> None后,整个__init__方法没有任何类型注解(self不需要单独加注解),mypy直接跳过了对这个方法内部的类型检查,对应的类型错误自然无法被检测到。
如果不想加-> None又希望mypy检查这个方法的类型,要么全局开启mypy的strict模式强制检查所有函数,要么给方法的任意参数加上类型注解,同样会触发mypy对整个方法的类型校验。
内容的提问来源于stack exchange,提问作者OrenIshShalom
相关产品推荐
相关产品推荐

