mypy是否要求__init__添加-> None注解?两类代码检测矛盾求解
mypy对__init__返回类型检测的差异原因及注解要求
差异原因
- 当
__init__方法包含self之外的其他参数时,mypy会自动推断其返回类型为None,因此即使没有显式添加-> None注解,也能通过类型检测。 - 当
__init__方法仅包含self一个参数时,mypy不会自动推断返回类型。在严格类型检查模式下,mypy要求所有函数(包括特殊方法)必须有明确的返回类型注解,此时缺少-> None就会触发检测错误。
__init__的注解要求
mypy并非强制所有场景下都必须给__init__添加-> None注解:
- 若
__init__带有self之外的参数,无需显式标注返回类型,mypy会自动处理。 - 若
__init__仅包含self参数,在严格模式下必须显式添加-> None注解才能通过检测;宽松模式下可能不会报错,但从代码规范角度,建议始终显式标注返回类型。
修正后的无参数__init__代码示例:
class A: def __init__(self) -> None: pass
内容的提问来源于stack exchange,提问作者zyxue
相关产品推荐
相关产品推荐

