我对python中的列表一无所知。
class Foo:
vals=[]
id=-1
j=-1
def __init__(self,ID):
self.id=ID
foos=[]
for i in range(10):
foos.append(Foo(i))
for j in range(15):
for f in foos:
if f.id == j:
f.vals.append(j)
f.j=j
break
for f in foos:
print(str(f.j)+" "+str(f.vals))
输出为:
0 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
3 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
4 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
5 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
6 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
7 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
8 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
9 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
为什么输出不像:
0 [0]
1 [1]
...
或者我需要更改以获得该输出?
谢谢。
答案 0 :(得分:2)
您正在创建“类变量”。这意味着该var在该类的所有实例之间共享。
您希望您的var属于类Foo
的每个实例,因此您应该通过在__init__
内定义它们来创建“实例变量”。
class Foo:
def __init__(self,ID):
self.id=ID
self.vals=[]
self.j=-1
输出:
0 [0]
1 [1]
2 [2]
3 [3]
4 [4]
5 [5]
6 [6]
7 [7]
8 [8]
9 [9]
您会看到一个working example on repl.it。