启用disallow_untyped_defs=true后,是否需保留其他disallow选项?
关于mypy disallow系列选项的保留价值分析
先直接给结论:除了disallow_incomplete_defs是disallow_untyped_defs的超集(保留会提供更严格的检查),另外两个选项disallow_untyped_calls和disallow_untyped_decorators都是独立的检查项,无法被disallow_untyped_defs覆盖,保留它们能提供额外的类型安全保障,不能安全移除。
下面逐个拆解每个选项的作用和与disallow_untyped_defs的差异:
1. disallow_incomplete_defs
你已经明确它是disallow_untyped_defs的超集:
disallow_untyped_defs仅检查完全没有任何类型提示的函数/方法定义;disallow_incomplete_defs会更进一步,检查那些有部分类型提示但不完整的定义——比如只给了参数类型却没写返回值类型,或者反过来。
保留这个选项能避免出现"写了一半类型就停了"的情况,让代码的类型提示更严谨。如果移除它,就会丢失这部分检查,只能捕捉完全无类型的定义。
2. disallow_untyped_calls
这个选项和disallow_untyped_defs的检查范围完全不重叠:
disallow_untyped_defs管的是你自己编写的函数有没有类型提示;disallow_untyped_calls管的是你调用的函数(不管是项目内还是第三方库的)有没有类型提示。
举个例子:你自己的函数都加了类型,但调用了一个没加类型的第三方工具函数,disallow_untyped_defs不会报错,但disallow_untyped_calls会触发警告,防止你因为调用无类型函数引入类型隐患,避免后续代码的类型退化。
3. disallow_untyped_decorators
这个选项专门针对装饰器的类型检查,是disallow_untyped_defs覆盖不到的:
disallow_untyped_defs只检查被装饰的函数本身;disallow_untyped_decorators检查装饰器自身有没有类型提示——不管是你自己写的装饰器,还是用的第三方装饰器。
无类型的装饰器会破坏被装饰函数的类型推断,比如导致mypy无法正确识别被装饰函数的参数/返回值类型。保留这个选项能确保装饰器的类型安全,从根源上避免这类问题。
内容的提问来源于stack exchange,提问作者Newbyte
相关产品推荐
相关产品推荐

