跳到内容

dataclass 中隐含的类变量 (RUF045)

此规则不稳定且处于预览状态。使用需要 --preview 标志。

作用

检查 dataclass 中隐含的类变量。

匹配 lint.dummy-variable-rgx 的变量会被排除在此规则之外。

为什么这不好?

类变量在类的所有实例之间共享。在 dataclass 中,没有任何类型提示的字段会被隐式地认为是类变量,如果用户尝试使用该字段初始化该类的实例,则会引发 TypeError

@dataclass
class C:
    a = 1
    b: str = ""

C(a = 42)  # TypeError: C.__init__() got an unexpected keyword argument 'a'

示例

@dataclass
class C:
    a = 1

建议改为

from typing import ClassVar


@dataclass
class C:
    a: ClassVar[int] = 1

Options (选项)