将类对象附加到同一类对象的另一个实例中的列表变量时出现的问题

阿什利

我试图用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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过方法将类实例附加到另一个类的列表变量

来自分类Dev

将类实例附加到另一个类的列表变量时如何消除重复项?

来自分类Dev

Python将对象创建附加到另一个类中的列表

来自分类Dev

将一个对象分配给同一类的另一个对象

来自分类Dev

将一个方法中的变量访问到同一类中的另一个方法

来自分类Dev

将一个类的对象添加到另一类的对象并检查Python中的重复项

来自分类Dev

一个实例如何更改同一类的另一个实例的某些变量

来自分类Dev

将类的实例传递给另一个构造函数,该构造函数将其对象添加到所传递的实例拥有的列表中

来自分类Dev

PHP-从同一类中的另一个类变量设置类变量?

来自分类Dev

从同一类中的另一个构造函数访问构造函数变量

来自分类Dev

从同一类中的另一个方法访问变量

来自分类Dev

PHP的同一类对象分为另一个类的两个功能

来自分类Dev

从同一类中的另一个方法调用方法时出错

来自分类Dev

检查数组列表中的项是否是另一个类中创建的对象的实例

来自分类Dev

检查数组列表中的项目是否是另一个类中创建的对象的实例

来自分类Dev

如何将一个类中的对象添加到另一个类中的List。

来自分类Dev

将一个类别的对象添加到另一类别的数据中

来自分类Dev

为什么可以将一个类的对象添加到另一个类的LinkedList中?

来自分类Dev

如何从同一类的另一个函数访问一个函数中的变量?

来自分类Dev

将一个类对象转换为另一类对象

来自分类Dev

将另一个类中的对象添加到JPanel

来自分类Dev

统一访问另一个类变量时,为什么需要附加或引用对象?

来自分类Dev

试图将一个对象的实例传递给另一个类

来自分类Dev

单击同一类中的另一个按钮时,通过 jquery 更改按钮的类更改回

来自分类Dev

在另一个名称空间中使用同一类覆盖对象创建

来自分类Dev

在另一个名称空间中使用同一类覆盖对象创建

来自分类Dev

将类对象实例作为参数从 main() 传递给另一个类对象实例

来自分类Dev

NameError:名称“ a”未定义。使用同一类中另一个函数的变量

来自分类Dev

在python的同一类中的另一个方法中调用一个类的方法

Related 相关文章

  1. 1

    通过方法将类实例附加到另一个类的列表变量

  2. 2

    将类实例附加到另一个类的列表变量时如何消除重复项?

  3. 3

    Python将对象创建附加到另一个类中的列表

  4. 4

    将一个对象分配给同一类的另一个对象

  5. 5

    将一个方法中的变量访问到同一类中的另一个方法

  6. 6

    将一个类的对象添加到另一类的对象并检查Python中的重复项

  7. 7

    一个实例如何更改同一类的另一个实例的某些变量

  8. 8

    将类的实例传递给另一个构造函数,该构造函数将其对象添加到所传递的实例拥有的列表中

  9. 9

    PHP-从同一类中的另一个类变量设置类变量?

  10. 10

    从同一类中的另一个构造函数访问构造函数变量

  11. 11

    从同一类中的另一个方法访问变量

  12. 12

    PHP的同一类对象分为另一个类的两个功能

  13. 13

    从同一类中的另一个方法调用方法时出错

  14. 14

    检查数组列表中的项是否是另一个类中创建的对象的实例

  15. 15

    检查数组列表中的项目是否是另一个类中创建的对象的实例

  16. 16

    如何将一个类中的对象添加到另一个类中的List。

  17. 17

    将一个类别的对象添加到另一类别的数据中

  18. 18

    为什么可以将一个类的对象添加到另一个类的LinkedList中?

  19. 19

    如何从同一类的另一个函数访问一个函数中的变量?

  20. 20

    将一个类对象转换为另一类对象

  21. 21

    将另一个类中的对象添加到JPanel

  22. 22

    统一访问另一个类变量时,为什么需要附加或引用对象?

  23. 23

    试图将一个对象的实例传递给另一个类

  24. 24

    单击同一类中的另一个按钮时,通过 jquery 更改按钮的类更改回

  25. 25

    在另一个名称空间中使用同一类覆盖对象创建

  26. 26

    在另一个名称空间中使用同一类覆盖对象创建

  27. 27

    将类对象实例作为参数从 main() 传递给另一个类对象实例

  28. 28

    NameError:名称“ a”未定义。使用同一类中另一个函数的变量

  29. 29

    在python的同一类中的另一个方法中调用一个类的方法

热门标签

归档