对象保留先前循环迭代的信息

S. *_*gee 2 python

我有一个叫做的类run_c,用于初始化和执行运动学模拟的运行.我将默认值分配给执行之前的属性run_c,例如.所有这一切都是提取用户输入值,聚合到字典中,并将它们分配给相应的属性(如果它们存在).例如...xrun_c.__init__()__init__()run_c

import vars.Defaults as dft
class run_c:

   ...
   dt     = dft.dt
   x      = dft.x0
   states = [ [], [], [], [] ]
   ...

   def __init__(self, input):
      for key in input.keys():
         if hasattr(self, key): setattr(self, key, input[key])
      ...
      self.execute()
Run Code Online (Sandbox Code Playgroud)

run_c.states是一个列表,用于记录run_c属性值随时间步长变化的列表.之后,run_c.execute()我在内部存储xstates[1],递增时间步长dt,并x使用速度和时间步长进行更新.这很简单,对吗?...

不过,这是问题的开始.第一次run_c创建,初始化和执行实例时,它运行完美.但是,我通过基于从JSON文件读取的列表创建,初始化和执行多个运行来操作此模拟.因此,在驱动程序模块中......

from Run import run_c
def main():
   ...
   for runEntry in runList:
      currRun = run_c(runEntry)
      ...
   ...
Run Code Online (Sandbox Code Playgroud)

会发生的是,run_c.states在循环的每次迭代之后,所有存储的值都不会被擦除.我认为run_c每次运行循环时都会创建新的实例,以便__init__()用新信息执行.为什么在x每个循环结束后保留数据值,例如旧值?

更新:当我添加一行代码以重置其中的states返回空列表的值时__init__(),问题就消失了.但这不应该是我想要做的必要步骤......应该吗?

gli*_*dud 8

dt,, xstates被定义为变量,而不是实例变量.您创建的该类的每个实例都将共享它们.如果每次生成新实例时都需要对它们进行初始化,那么这__init__()就是:

class run_c:

   def __init__(self, input):
      ...
      self.dt     = dft.dt
      self.x      = dft.x0
      self.states = [ [], [], [], [] ]
      ...

      for key in input.keys():
         if hasattr(self, key): setattr(self, key, input[key])
      ...
      self.execute()
Run Code Online (Sandbox Code Playgroud)