class Func:
def __init__(self):
self.weight = 0
class Skill:
def __init__(self, bson):
self.f = [Func()]*5
for i in range(0,5):
self.f[i].weight = bson['w'+str(i+1)]
d = {"w1":20,"w2":0,"w3":0,"w4":0,"w5":0}
s = Skill(d)
print s.f[0].weight
输出为0而不是20.我总是很难弄清楚python中类成员和对象成员的区别。
答案 0 :(得分:3)
您不应以这种方式创建Func
列表
self.f = [Func()]*5
您应该使用列表推导或其他方法
self.f = [Func() for _ in range(5)]
在第一种方法中,您创建的长度为list
的长度为5,其中所有元素都指向Func
的相同实例。你不想要这个,你想创建一个list
5个不同的实例 Func
。