クラス「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
印刷出力で最終的に得られるのは、A.adjList の場合でも ['B', 'D', 'F', 'C', 'G', 'D'] のようなものです。['B', 'D', 'F'] だけを期待していました。