如何在Python中将唯一对象添加到列表

时间:2019-07-13 12:06:24

标签: python

我试图将对象添加到列表中,但是当我打印该列表中的元素时,我得到了最后一个对象的属性。

ws.Shapes(ActiveSheet.Shapes.Count).OnAction = "ClickResizeImage"

我明白了:

import random


class Unit:
    arr = []

    def __init__(self):
        self.arr.clear()
        for i in range(2):
            self.arr.append(random.randint(1, 100))
            print("arr in Unit ", self.arr)

class SetOfUnits:

    lst = []

    def __init__(self):
        self.lst.clear()
        for i in range(3):
            self.lst.append(Unit())
            print("arr in SetOfUnits ", self.lst[i].arr)


p = SetOfUnits()

for i in range(3):
    print(p.lst[i].arr)

问题出在最后三行。看起来对象p.lst [0],p.lst [1],p.lst [2]引用的是同一对象,而不是不同的对象。 我想得到:

arr in Unit  [17, 16]
arr in SetOfUnits  [17, 16]
arr in Unit  [98, 20]
arr in SetOfUnits  [98, 20]
arr in Unit  [16, 39]
arr in SetOfUnits  [16, 39]
[16, 39]
[16, 39]
[16, 39]

您能帮我找出我在做什么错吗?

2 个答案:

答案 0 :(得分:2)

__init__函数中定义列表。

class Unit:

    def __init__(self):
        self.arr = []
        self.arr.clear()
        for i in range(2):
            self.arr.append(random.randint(1, 100))
            print("arr in Unit ", self.arr)

class SetOfUnits:

    def __init__(self):
        self.lst = []
        self.lst.clear()
        for i in range(3):
            self.lst.append(Unit())
            print("arr in SetOfUnits ", self.lst[i].arr)

您的操作方式是,按类定义变量,需要按实例进行定义。

请参阅:class variable vs instance variable --Python

答案 1 :(得分:0)

lstarr class 属性,而不是实例属性。