我有一个带有实例变量的类,我想在循环中使用类方法修改,我正在做的简化版本:
class Example:
def __init__(self,x,z):
self.x=x
self.z=z
def run(self,y):
temp_list=[self.x, self.z]
for ind,item in enumerate(temp_list):
temp_list[ind] = temp_list[ind]+y
print (self.x, self.z)
ex = Example(5,6)
ex.run(5)
我得到的输出是[5,6]而不是所需的[10,11]。 我想知道是否有人能指出我为何会发生这种情况的解释?
答案 0 :(得分:5)
在run()
中,您可以创建一个包含2个项目的列表,值为self.x
和self.z
。接下来,迭代该列表,并通过向其添加y
来修改每个值。
在for
- 循环后,temp_list
将为[10, 11]
,但您尚未以任何方式修改self.x
或self.y
。
因此,print()
调用将打印未经修改的self.x
和self.y
值,在您的示例中为5和6。
答案 1 :(得分:3)
如果您实际上没有写self.x = ...
,那么您通常可以认为self.x
不会被修改。当您编写temp_list[ind] + y
并将其存储在temp_list[ind]
时,您需要使用新值更新列表,这与其他变量发生的任何值无关保持(包括您的对象的x
变量)。
答案 2 :(得分:0)
要使用类似于您的代码获得所需结果,您可以执行以下操作:
class Example:
def __init__(self,x,z):
self.list=[x, z]
def run(self,y):
for ind,item in enumerate(self.list):
self.list[ind] = self.list[ind]+y
print (self.list)
ex = Example(5,6)
ex.run(5)
这将在您的init定义中创建一个self.list
项,然后用于迭代初始值并将y
值添加到其中。你遇到的主要错误是打印一个未经改动的列表(但你在正确的轨道上!)
希望这有帮助!
答案 3 :(得分:0)
您可以使用。
下的示例class Example:
def __init__(self, x, z):
self.x = x
self.z = z
def run(self,y):
# Put your init arguments into the array
result = [self.x, self.z]
# Modify your init arguments
for x in range(len(result)):
result[x] += y
# Return the array with new values
return result
ex = Example(5, 6)
print(ex.run(5))
也许该链接对您有帮助,learn for loop in python