我试图将对象添加到列表中,但是当我打印该列表中的元素时,我得到了最后一个对象的属性。
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]
您能帮我找出我在做什么错吗?
答案 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)
您的操作方式是,按类定义变量,需要按实例进行定义。
答案 1 :(得分:0)
lst
和arr
是 class 属性,而不是实例属性。