我有一个叫做的类run_c
,用于初始化和执行运动学模拟的运行.我将默认值分配给执行之前的属性run_c
,例如.所有这一切都是提取用户输入值,聚合到字典中,并将它们分配给相应的属性(如果它们存在).例如...x
run_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()
我在内部存储x
值states[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__()
,问题就消失了.但这不应该是我想要做的必要步骤......应该吗?
dt
,, x
和states
被定义为类变量,而不是实例变量.您创建的该类的每个实例都将共享它们.如果每次生成新实例时都需要对它们进行初始化,那么这__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)
归档时间: |
|
查看次数: |
525 次 |
最近记录: |