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']。

4

1 回答 1

2

当您需要实例变量时,您正在使用类变量。基本上一个类变量是为一个类的所有对象设置的,而一个实例变量只为一个对象设置。

这是您的类,adjList它作为实例变量而不是类变量:

class NodeCreate:

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

这是我之前写的一个答案,更详细地解释了它:https ://stackoverflow.com/a/12924803/1460235

于 2012-12-10T05:37:29.717 回答