python中的对象成员赋值

时间:2015-05-12 11:42:28

标签: python

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中类成员和对象成员的区别。

1 个答案:

答案 0 :(得分:3)

您不应以这种方式创建Func列表

self.f = [Func()]*5

您应该使用列表推导或其他方法

self.f = [Func() for _ in range(5)]

在第一种方法中,您创建的长度为list的长度为5,其中所有元素都指向Func相同实例。你不想要这个,你想创建一个list 5个不同的实例 Func