在 Python 的循环中,我将 class 的新实例分配给同一个变量,但它一直指向旧实例?

In a loop in Python, I assign a new instance of a class to the same variable, but it keeps pointing to the old instance?

我创建了以下 class 表示可以存放玩具(数字)的箱子:

class Chest:

  toys = []

  def __init__(self):
    return

  def add(self, num):
    self.toys.append(num)
    return

使用这个class的主要代码如下:

room_of_chests = []

for i in range(3):

  print "Chest", i
  temp = Chest()

  print "Number of toys in the chest:", len(temp.toys)

  for j in range(5):
    temp.add(j)

  print "Number of toys in the chest:", len(temp.toys)
  print ""

  room_of_chests.append(temp)

因此,对于 i 的每次迭代,我都会创建一个新的 Chest 并使变量 temp 指向它(正确吗?) .因此,理论上,在每次迭代中,temp 将从一个空箱子开始,以一个装有 5 个玩具的箱子结束(正确吗?)。

因此,我期望的输出是:

Chest 0
Number of toys in the chest: 0
Number of toys in the chest: 5

Chest 1
Number of toys in the chest: 0
Number of toys in the chest: 5

Chest 2
Number of toys in the chest: 0
Number of toys in the chest: 5

然而,我实际得到的是:

Chest 0
Number of toys in the chest: 0
Number of toys in the chest: 5

Chest 1
Number of toys in the chest: 5
Number of toys in the chest: 10

Chest 2
Number of toys in the chest: 10
Number of toys in the chest: 15

我做错了什么?有人可以快速解释一下在这种情况下实例化是如何工作的吗?以及Python中变量指向对象的规则?提前致谢。

问题是您有一个 class 属性而不是一个实例变量。通过在 __init__ 函数中将其创建为 self.

的成员,更改 class 使其成为实例变量

此外,__init__中不需要使用return

class Chest:

  def __init__(self):
    self.toys = []


  def add(self, num):
    self.toys.append(num)

如果您来自 Java 或 C++ 等语言,这是一个常见的错误。