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

2024-05-14 23:35:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解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

我希望得到的东西是:

^{pr2}$

但我得到:

^{3}$

我检查了下一个问题:

why is python reusing a class instance inside in function

还有很多Python的参考,但是我不明白发生了什么。我认为这与newIntContainer标识符的重用有关,但我对其理解不深。在

为什么Python似乎重用了新对象的最后一个引用,即使我已将其添加到永久列表中?我能做些什么来解决这种行为?在

谢谢;)


Tags: inselffordefclassprintappendintcontainer
2条回答

因为您使listOfInts是一个变量,这就是self.listOfInts正在访问的内容,无论它是self实例;因此,所有append都将转到相同的列表。在

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

listOfInts已定义为类变量。在

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

如果您想保存类相关的状态(一个典型的例子是当您想知道所创建的类的实例数时),这个行为非常有用。在

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

相关问题 更多 >

    热门问题