python objectlist添加到所有对象

时间:2013-06-16 20:30:09

标签: python class object overwrite

我正在尝试使用一个类(dprObject),它是几个dprVariables的容器 每个变量都有一个带整数的列表(现在) 但是当我将某些内容更改为一个变量时,它会更改为所有其他变量

在这种情况下,我得到的输出是

  分数:5,6,3,4,   职位:5,6,3,4,

但我希望看到

  分数:5,6,   职位:3,4,

#!/usr/bin/python3

import pprint

def main(): 
    d = dprObject() #new dpr object
    score = dprVariable(d, "score") #new dpr variable
    score.set(5) #set value
    score.set(6)

    position = dprVariable(d, "position")
    position.set(3)
    position.set(4)

    print(d)
    print("done")

class dprObject:
    var = [] 
    t = 0
    def __init__(self):
        pass

    def __str__(self):
        toReturn = ""
        for v in self.var:
            toReturn += v.toString()
        return toReturn

    def tick(self):
        self.t += 1

    def addVariable(self,v):
        self.var.append(v)


class dprVariable:
    name = ""
    value = None
    val = []

    def __init__(self,d,name):
        self.name = name
        d.addVariable(self)

    def __str__(self):
        return self.toString()

    def toString(self):
        toReturn = self.name + ": "
        for v in self.val:
            toReturn += str(v) + ", "
        return toReturn

    def set (self, value):
        self.value = value
        self.val.append(value)

#class DprValue:



if __name__ == "__main__":
    main()

任何帮助将不胜感激 感谢

1 个答案:

答案 0 :(得分:1)

此代码:

class dprVariable:
    ...
    val = []

使val成为一个类变量,在dprVariable的所有实例之间共享。要为每个实例设置一个val,您需要执行此操作:

class dprVariable:
    def __init__(self, ...):
        self.val = []

dprObject有同样的问题。)