【发布时间】:2020-05-27 07:48:41
【问题描述】:
我正在尝试用 Python 编写一个简单的代码。我在 Python 的基础知识方面仍然很薄弱,我被困在这个问题上。我有一个内部类 Node()。它有一个属性 routeNodes 在它是一个列表。我用它来存储同一个类对象(节点())的其他实例。所以我首先初始化 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")
【问题讨论】:
标签: python-3.x list class append inner-classes