unsorted-dunder-slots (RUF023)
有时提供修复。
作用
检查未按照自然排序排序的__slots__
定义。
为什么这不好?
一致性是好事。为此特殊变量使用通用约定,以使你的代码更具可读性和符合习惯用法。
示例
建议改为
修复安全性
在三种情况下,此规则的修复被标记为不安全。
首先,如果__slots__
定义中存在任何单独占据整行的注释,则修复是不安全的,例如
class Foo:
__slots__ = [
# eggy things
"duck_eggs",
"chicken_eggs",
# hammy things
"country_ham",
"parma_ham",
]
这是一种常见的模式,用于分隔类槽中的类别,但是尝试在对__slots__
的项目应用自然排序时维护这些类别将超出此规则的范围。
其次,如果单行上有两个以上的__slots__
项,并且该行也有尾随注释,则该修复也被标记为不安全,因为在这里无法准确地衡量在排序__slots__
时应将注释移动到哪个项目
最后,每当 Ruff 检测到同一文件中其他地方的代码以某种方式读取__slots__
变量,并且__slots__
变量未分配给集合时,此规则的修复程序都会被标记为不安全。 这是因为如果正在迭代类的__slots__
,或者正在分配给另一个值,则__slots__
中项目的顺序可能具有语义意义。
在绝大多数其他情况下,此规则的修复不太可能导致中断。因此,Ruff 会将此规则的修复标记为安全。 但是,请注意(尽管很少见),__slots__
的值仍然可以被__slots__
定义所在的模块之外的代码读取,在这种情况下,此规则的修复在理论上可能会导致中断。