我试图用Python编写一个简单的代码。我在Python的基础知识上仍然很弱,我一直在这个问题上停留。我有一个内部的类Node()。它具有一个属性routeNodes,它是一个列表。我正在使用它来存储同一类Object(Node())的其他实例。因此,我首先初始化Class firstNode并为其提供一些虚拟值。
然后,我运行一个for循环进行10次迭代。在每个迭代中,我都创建同一Node()类的另一个实例。然后,我将firstNode对象(再次是Node()的实例)附加到每个secondNode类中。
它将firstNode添加到secondeNode的routeNode列表变量。
但是它还会将firstnode对象添加到其自己的类对象的routenode列表变量中!
相同的firstNode对象将附加到两个类对象。为什么会这样?我不能添加这样的类对象吗?以及如何阻止它发生?
附加我的代码。您可以在测试类中运行它并调试“ secondNode.addRouteNodes(firstNode)”行,您将了解我的问题。
class Node:
kms = 0
cumulativeKms = 0
routeNodes = []
nodeName = ""
def __init__(self, nodeName):
self.nodeName = nodeName
def setNodeName(self, nodeName):
self.nodeName = nodeName
def getNodeName(self):
return self.nodeName
def setKms(self, kms):
self.kms = kms
def getKms(self):
return self.kms
def setCumulativeKms(self, kms):
self.cumulativeKms = self.cumulativeKms + kms
def getCumulativeKms(self):
return self.cumulativeKms
def addRouteNodes(self, nodes):
self.routeNodes.append(nodes)
def getRouteNodes(self):
return self.routeNodes
firstNode = Node("first")
firstNode.setKms(0)
firstNode.setCumulativeKms(0)
for i in range(10):
secondNode = Node('new'+str(i))
secondNode.setKms(10)
secondNode.setCumulativeKms(10)
routes = firstNode.getRouteNodes()
for route in routes:
secondNode.addRouteNodes(route)
secondNode.addRouteNodes(firstNode)
print("Done")
class Node:
kms = 0
cumulativeKms = 0
routeNodes = []
nodeName = ""
这些变量不属于创建的每个新类对象,而是在对象之间共享,因此,第一个类将附加到其自身的routeNodes变量上:secondNode.addRouteNodes(route)
。它们被称为类变量。
一种解决方案是初始化构造函数中的变量,如下所示:
self.kms = 0
self.cumulativeKms = 0
self.routeNodes = []
self.nodeName = ""
这些称为实例变量。您需要此变量。
因此,更新后的代码将是:
class Node:
def __init__(self):
self.kms = 0
self.cumulativeKms = 0
self.routeNodes = []
self.nodeName = ""
def setNodeName(self, nodeName):
self.nodeName = nodeName
def getNodeName(self):
return self.nodeName
def setKms(self, kms):
self.kms = kms
def getKms(self):
return self.kms
def setCumulativeKms(self, kms):
self.cumulativeKms = self.cumulativeKms + kms
def getCumulativeKms(self):
return self.cumulativeKms
def addRouteNodes(self, nodes):
self.routeNodes.append(nodes)
def getRouteNodes(self):
return self.routeNodes
firstNode = Node()
firstNode.setNodeName("first")
firstNode.setKms(0)
firstNode.setCumulativeKms(0)
for i in range(10):
secondNode = Node()
secondNode.setNodeName('new'+str(i))
secondNode.setKms(10)
secondNode.setCumulativeKms(10)
routes = firstNode.getRouteNodes()
for route in routes:
secondNode.addRouteNodes(route)
secondNode.addRouteNodes(firstNode)
print("Done")
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句