2012-12-10 128 views
1

我的类“NodeCreate”中的类变量“adjList”存在问题。似乎只要我追加到adjList中,它就被扩展用于该类的所有对象,而不仅仅是我所调用的那个对象。我认为我从根本上误解了一些东西,但我无法弄清楚我应该做什么。我怎样才能追加到每个对象的adjList?类变量不是静态的吗?

代码:

import sys 

class FileReader: 

    edgeList = [] 

    def __init__(self, args): 
     with open(args, 'r') as inFile: 

      #get the node list 
      self.nodeList = inFile.readline().strip().split() 

      while 1: 
       line = inFile.readline().strip() 
       if not line: 
        break 

       self.edgeList.append(line) 

class NodeCreate: 

    adjList = [] 

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

def main(): 

    nodeObjDict = {} 

    #read in nodes 
    fr = FileReader(sys.argv[1]) 

    #make node objects 
    for node in fr.nodeList: 
     nodeObjDict[node] = NodeCreate(node) 

    #make smaller items from edgeList 
    for item in fr.edgeList: 
     itemList = item.split() 

     #add adjacent lists 
     nodeObjDict[itemList[0]].adjList.append(itemList[1]) 
     print(nodeObjDict[itemList[0]].adjList) 



if __name__ == "__main__": 
    main() 

输入:

A B C D E F G 
A B 
A D 
A F 
B C 
B G 
C D 

我最终什么得到用于我的打印输出是这样的:[ 'B', 'd', 'F',“C ','G','D'],即使对于A.adjList。我期待的只是['B','D','F']。

回答

2

当你想要一个实例变量时,你正在使用一个类变量。基本上,为类的所有对象设置类变量,并且仅为一个对象设置实例变量。

下面是adjList类的一个实例变量,而不是一类变量:

class NodeCreate: 

    def __init__(self, name): 
     self.name = name 
     self.adjList = [] 

下面是我写的更详细地解释前一个答案:https://stackoverflow.com/a/12924803/1460235

+0

感谢您的帮助。我很难理解。 – Ci3

+0

没问题;起初它很混乱。 –