any-eq-ne-annotation (PYI032)
源自 flake8-pyi 代码检查器。
修复总是可用的。
作用
检查 __eq__
和 __ne__
的实现,它们使用 typing.Any
作为其第二个参数的类型注解。
为什么这不好?
Python 文档建议使用 object
来“以类型安全的方式指示一个值可以是任何类型”。另一方面,Any
应该被视为“在需要混合动态和静态类型代码时的逃生出口”。由于使用 Any
允许你编写高度不安全的代码,因此通常只有在你的代码的语义在类型检查器看来无法表达时才应该使用 Any
。
Python 中的期望是,使用 ==
或 !=
比较两个任意对象永远不应该引发异常。这个契约可以在类型系统中完全表达,并且不涉及从类型检查器请求不健全的行为。因此,对于实现这些比较运算符(__eq__
和 __ne__
)的方法的第二个参数,object
比 Any
更合适的注解。
示例
建议改为