Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python attr库类是否共享默认值?_Python_Attr - Fatal编程技术网

Python attr库类是否共享默认值?

Python attr库类是否共享默认值?,python,attr,Python,Attr,下面是一个奇怪的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是类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
是类
List
的一个静态变量,这意味着它不是一个成员变量,它在
List
的所有实例中都是共享的。您可能希望使其成为一个成员变量。

下面的代码将为
列表的每个实例创建一个“私有”列表
有关文档,请参阅

import attr

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

列表
default=[]
list
实例之间共享。