您认为启用该选项有什么好处吗?现在它默认被禁用,我没有看到签名可读性或其他方面有任何好处。
嗯,任何严格的类型检查都有其好处。我总是启用此检查,并使用
None
注释来注释任何可以采用 Optional[T]
的变量,因为这使得 mypy
能够捕获缺失的空检查并防止讨厌的 'NoneType' object has no attribute
运行时错误。
但是,我也理解为什么人们不想启用它。相当多的代码广泛利用了 Python 的动态特性,对它们进行注释会很乏味。有些人可能也不喜欢冗长的写作
Optional[]
。对我来说,支票的好处超过了细微差别,但您的里程可能会有所不同。
由于Python类型注释的目标是“渐进式打字”,这意味着类型不是必需的,并且您可以拥有部分注释的代码,因此没有太严格的默认设置可能有利于此类工具的采用。
启用
--no-strict-optional
会导致类型检查无效,并且违反了静态类型的最基本规则。
如果您有某个函数参数
x: T
,并且将 None
分配给它,则静态类型检查器应该 only 接受 T
是 None
的类型或超类型(即 NoneType
或 ) object
),或者Any
。否则应该被拒绝。
但是如果你使用
--no-strict-optional
,那么这不再成立,那就是类型不安全。
mypy 文档对此也非常清楚:
是邪恶的。避免使用它,并且在不了解它的作用之前绝对不要使用它。--no-strict-optional
我还建议不要使用
--implicit-optional
,它会隐式地将 | None
附加到参数,并默认使用 None
。尽管这不像 --no-strict-optional
那样类型不安全,但它同样无效。还有著名的规则。 2 个import this
:
Explicit is better than implicit.