我的类“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']。
答案 0 :(得分:2)
当您需要实例变量时,您正在使用类变量。基本上,为类的所有对象设置类变量,并且仅为一个对象设置实例变量。
这是您的类adjList
作为实例变量而不是类变量:
class NodeCreate:
def __init__(self, name):
self.name = name
self.adjList = []
这是我之前写过的答案,它更详细地解释了它:https://stackoverflow.com/a/12924803/1460235