2013-03-17 93 views
0

我上课点我的清单发生了什么?

class Dot: 
    def __init__(self, x, y): 
    self.x=x 
    self.y=y 

我有类簇

class Cluster: 
    ic=0 
    List=[Dot] 
    colour=0 
    def __init__(self, Dot): 
     self.List[self.ic]=Dot 
     self.ic=self.ic+1 
    def includeDot(self, Dot): 
     self.List[self.ic]=Dot 
     self.ic=self.ic+1 

其中包括点(列表)的列表。

而且我有类ClusterMaker哪里是集群的列表(和其他一些程序,但是这并不重要,这个问题)

class ClusterMaker: 
    total=0 
    i=0 
    CList=[Cluster] 
    def addCluster(self,Cluster): 
     self.CList.append(Cluster)  

最后,还有我的形式按钮,开始创建点和簇

def onChoose(self):    
     # ClMaker=ClusterMaker() 
     self.total=self.ent.get().strip() #how many dots we haver 
     self.CM=ClusterMaker() 
     i=0  
     while (i < int(self.total)): 
      dot=Dot(randint(0, 575), randint(0,670)) 
      clst=Cluster(dot) 
      clst.colour= randrange(100, 999, 15) 
      self.CM.addCluster(clst) 
      box.showerror('j', str(str(self.CM.CList[i].List[0].x)+str(clst.List[0].x))) 
      this box shows us x coord of every dot in our cluster list 
      self.canvas.create_oval(clst.List[0].x, clst.List[0].y, clst.List[0].x+10, clst.List[0].y+10, fill=str("#"+str(clst.colour))) 
      i=i+1 
     b=0 
     while(b<6): 
      box.showerror('j', str(self.CM.CList[b].List[0].x)) 
      and this box shows us x coords too 
      b=b+1 

但是我的清单上发生了什么?为什么当我要求第二次显示x坐标时,它显示所有坐标系中所有点的x坐标相同?

+0

'ic'(在你的类)和'self.ic'是不一样的事情,请不要命名您的变量'List'。 – 2013-03-17 13:56:00

回答

1

类属性实例化一次并在实例之间共享。你必须在__init__创建新的列表:

def __init__(self, Dot): 
    self.List = [Dot] 
    self.List[self.ic]=Dot 
    self.ic=self.ic+1 
+0

谢谢,我希望我可以投票给你)当我会有更多的声誉,我会的。我只有11岁,需要15岁 – Ophelia 2013-03-17 14:54:37