在 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++ 等语言,这是一个常见的错误。
我创建了以下 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
.
此外,__init__
中不需要使用return
。
class Chest:
def __init__(self):
self.toys = []
def add(self, num):
self.toys.append(num)
如果您来自 Java 或 C++ 等语言,这是一个常见的错误。