Python3将对象附加到实例列表,但仅在该实例中

时间:2018-04-30 01:23:30

标签: python python-3.x

我有一个名为TerrainTile的对象列表。 这些实例中的每一个都有一个名为resourceList的列表。

resourceList = []

我在此方法中将名为obj的对象附加到此列表中:

def add_resource_object (self, obj):
    self.resourceList.append(obj)
    return

由于某种原因,而不是每个单独的实例都有自己的名为resourceList的列表。似乎所有实例都共享相同的resourceList列表,并且当它附加到所有实例时都附加到。

我一遍又一遍地检查但似乎无法弄清楚为什么.append()附加到TerrainTile的所有实例

先谢谢!

编辑:解决方案是在 init 构造函数中声明类的变量,而不是作为类本身的成员。谢谢你!

2 个答案:

答案 0 :(得分:1)

根据您的上述代码段:

resourceList = []

您正在创建一个在所有实例之间共享的类变量,而不是一个特定实例本地的实例变量。相反,初始化您的实例变量,如下所示:

def __init__(self):
    self.resourceList = []

详情请见此处:https://docs.python.org/3/tutorial/classes.html#class-and-instance-variables

答案 1 :(得分:0)

如评论和其他答案中所述,您将相同的实例变量传递给每个列表。根据对象的类型,您可以在将其添加到每个列表之前复制它。

像这样导入

new_obj = deepcopy(obj)

像这样使用

            this.setState((prevState, props) => {
                return Object.assign({}, prevState, existedCard);
            });