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 []

为什么会发生这种情况,我该如何获得每次获取新列表的行为?

解决方法

以下代码将为List的每个实例创建一个“私人”列表。
有关文档,请参见here

import attr

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

尽管我对attr软件包不了解很多。但是我很确定l是类List的静态变量,这意味着它不是成员变量,并且在List的所有实例之间共享。您可能希望使其成为成员变量。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...