mutable-dataclass-default (RUF008)
作用
检查数据类属性中是否存在可变默认值。
为什么这不好?
可变默认值在数据类的所有实例之间共享状态。当在一个实例中更改属性时,这可能会导致错误,因为这些更改会意外地影响所有其他实例。
与其共享可变默认值,不如使用 field(default_factory=...)
模式。
如果默认值旨在是可变的,则必须使用 typing.ClassVar
注释;否则,将引发 ValueError
。
示例
from dataclasses import dataclass
@dataclass
class A:
# A list without a `default_factory` or `ClassVar` annotation
# will raise a `ValueError`.
mutable_default: list[int] = []
建议改为
from dataclasses import dataclass, field
@dataclass
class A:
mutable_default: list[int] = field(default_factory=list)
或者