dataclass默认参数中的函数调用 (RUF009)
作用
检查 dataclass 属性默认值中的函数调用。
为什么这不好?
函数调用只在定义时执行一次。 返回的值随后会被 dataclass 的所有实例重用。 当函数调用返回一个可变对象时,这可能会导致意外的行为,因为对该对象的更改将在所有实例之间共享。
如果一个字段需要用一个可变对象初始化,使用 field(default_factory=...)
模式。
默认参数为 NewType
调用,且原始类型为不可变类型的属性将被忽略。
示例
from dataclasses import dataclass
def simple_list() -> list[int]:
return [1, 2, 3, 4]
@dataclass
class A:
mutable_default: list[int] = simple_list()
建议改为
from dataclasses import dataclass, field
def creating_list() -> list[int]:
return [1, 2, 3, 4]
@dataclass
class A:
mutable_default: list[int] = field(default_factory=creating_list)