You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 10:12:36