unnecessary-from-float (FURB164)
派生自 refurb 代码检查工具。
有时提供修复。
此规则不稳定且处于预览状态。使用需要 --preview
标志。
作用
检查不必要的 from_float
和 from_decimal
用法,以构造 Decimal
和 Fraction
实例。
为什么这不好?
自 Python 3.2 起,可以通过将浮点数或 decimal 实例直接传递给构造函数来构造 Fraction
和 Decimal
类。 因此,使用 from_float
和 from_decimal
方法是不必要的,应该避免使用更简洁的构造函数语法。
但是,from_*
方法和构造函数之间存在重要的行为差异
from_*
方法验证其参数类型,并为无效类型引发TypeError
- 构造函数接受更广泛的参数类型,而无需验证
from_*
方法的参数名称与构造函数不同
示例
Decimal.from_float(4.2)
Decimal.from_float(float("inf"))
Fraction.from_float(4.2)
Fraction.from_decimal(Decimal("4.2"))
建议改为
修复安全性
默认情况下,此规则的修复被标记为不安全,因为
from_*
方法提供构造函数不提供的类型验证- 删除类型验证可能会更改程序行为
- 方法和构造函数之间的参数名称不同
只有在以下情况下,修复才会标记为安全
- 已知参数类型对于目标构造函数有效
- 未使用任何关键字参数,或者它们与构造函数的参数匹配