问题描述
这是一个奇怪的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 []
为什么会发生这种情况,我该如何获得每次获取新列表的行为?
解决方法
以下代码将为List
的每个实例创建一个“私人”列表。
有关文档,请参见here。
import attr
@attr.s
class List:
l = attr.ib(factory=list)
,
尽管我对attr
软件包不了解很多。但是我很确定l
是类List
的静态变量,这意味着它不是成员变量,并且在List
的所有实例之间共享。您可能希望使其成为成员变量。