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

印刷出力で最終的に得られるのは、A.adjList の場合でも ['B', 'D', 'F', 'C', 'G', 'D'] のようなものです。['B', 'D', 'F'] だけを期待していました。

4

1 に答える 1

2

インスタンス変数が必要な場合は、クラス変数を使用しています。基本的に、クラス変数はクラスのすべてのオブジェクトに設定され、インスタンス変数は 1 つのオブジェクトにのみ設定されます。

adjListクラス変数の代わりにインスタンス変数として使用するクラスは次のとおりです。

class NodeCreate:

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

これは私が以前に書いた回答で、それをより詳細に説明しています: https://stackoverflow.com/a/12924803/1460235

于 2012-12-10T05:37:29.717 に答える