attr 库 类 共享默认值?

attr library classes are sharing default value?

这是一个奇怪的 attr 行为的例子。

import attr

@attr.s
class List:
  l = attr.ib(default=[])

a = List()
b = List()

a.l.append(1)

print(b.l)
# output is [1], this is unintuitive, why not []

为什么会这样,我怎样才能得到每次获取新列表的行为?

虽然我对attr包不是很了解。但我很确定 l 是 class List 的静态变量,这意味着它不是成员变量,它在 List 的所有实例之间共享。你可能想让它成为一个成员变量。

下面的代码将为 List
的每个实例创建一个 'private' 列表 有关文档,请参阅 here

import attr

@attr.s
class List:
  l = attr.ib(factory=list)