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)
这是一个奇怪的 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)