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 

しかし、私のリストでは何が起こっているのでしょうか? 2 回目に x 座標を表示するように要求すると、すべてのクラスターのすべてのドットに対して同じ x 座標が表示されるのはなぜですか?

4

1 に答える 1

1

クラス属性は一度インスタンス化され、インスタンス間で共有されます。で新しいリストを作成する必要があります__init__:

def __init__(self, Dot):
    self.List = [Dot]
    self.List[self.ic]=Dot 
    self.ic=self.ic+1
于 2013-03-17T14:08:30.997 に答える