gpt4 book ai didi

python - 类变量不是静态的?

转载 作者:行者123 更新时间:2023-12-01 05:52:15 25 4
gpt4 key购买 nike

我的类“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']。

最佳答案

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

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

class NodeCreate:

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

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

关于python - 类变量不是静态的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13795503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com