2012-12-10 45 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

沒問題;起初它很混亂。 –