我的名单发生了什么?

时间:2013-03-17 13:53:25

标签: python list class

我有课程

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

我有类Cluster

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 coords时,它显示所有簇中所有点的相同x坐标?

1 个答案:

答案 0 :(得分:1)

类属性实例化一次并在实例之间共享。您必须在__init__

中创建新的列表
def __init__(self, Dot):
    self.List = [Dot]
    self.List[self.ic]=Dot 
    self.ic=self.ic+1