我试图理解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似乎重用了新对象的最后一个引用,即使我已将其添加到永久列表中?我能做些什么来解决这种行为?在
谢谢;)
因为您使
listOfInts
是一个类变量,这就是self.listOfInts
正在访问的内容,无论它是self
实例;因此,所有append
都将转到相同的列表。在如果这不是您想要的,那么您需要使
listOfInts
成为一个实例变量,例如通过在__init__
方法的开头指定self.listOfInts = []
。在listOfInts已定义为类变量。在
类变量由类的所有实例共享。在
如果您想保存类相关的状态(一个典型的例子是当您想知道所创建的类的实例数时),这个行为非常有用。在
如果您希望listOfInts对于每个实例都是唯一的,那么应该在init或类的其他方法中将其定义为self.listOfInts公司在
相关问题 更多 >
编程相关推荐