繁体   English   中英

为什么这个Python类复制另一个类内容?

[英]Why is this Python class copying another class contents?

我试图理解Python中的异化行为。

我有下一个python代码:

class IntContainer:

    listOfInts = []

    def __init__(self, initListOfInts):

        for i in initListOfInts:
            self.listOfInts.append(i)

    def printInts(self):

        print self.listOfInts

if __name__ == "__main__":

    intsGroup1 = [1,2,3,4]
    intsGroup2 = [4,5,6,7]

    intsGroups = [intsGroup1,intsGroup2]

    intsContainers = []

    for ig in intsGroups:
        newIntContainer = IntContainer(ig)
        intsContainers.append(newIntContainer)

    for ic in intsContainers:
        print ic.listOfInts

我希望得到类似的东西:

[1, 2, 3, 4]
[4, 5, 6, 7]

但我得到:

[1, 2, 3, 4, 4, 5, 6, 7]
[1, 2, 3, 4, 4, 5, 6, 7]

我检查了下一个问题:

为什么python在函数中重用一个类实例

还有很多Python参考,但我无法理解发生了什么。 我认为与newIntContainer标识符重用度有关,但我不太了解它。

为什么Python似乎重用了新对象的最后一个引用,即使我已将它添加到永久列表中? 我该怎么做才能解决这个问题?

谢谢 ;)

因为你使listOfInts成为一个变量,所以self.listOfInts正在访问它,无论它是什么样的self实例; 所以,所有append s都会进入同一个列表。

如果那不是你想要的,你需要使listOfInts成为一个实例变量,例如在__init__方法的开头指定self.listOfInts = []

listOfInts已被定义为类变量。

类变量由类的所有实例共享。

如果要保存与类相关的状态,则此行为很有用(一个典型示例是当您想知道创建的类的实例数时。

如果您希望listOfInts对于每个实例都是唯一的,那么您应该在init或该类的其他方法中将其定义为self.listOfInts

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM