【问题标题】:python objectlist adds to all objectspython objectlist 添加到所有对象
【发布时间】:2013-06-12 19:28:00
【问题描述】:

我正在尝试创建一个类 (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()

任何帮助将不胜感激 谢谢

【问题讨论】:

    标签: python class object overwrite


    【解决方案1】:

    这段代码:

    class dprVariable:
        ...
        val = []
    

    使val 成为一个类变量,在dprVariable 的所有实例之间共享。要为每个实例创建一个 val,您需要这样做:

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

    dprObject也有同样的问题。)

    【讨论】:

      猜你喜欢
      • 2022-06-29
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多