私は、run_c
と呼ばれるクラスを持っています。これは、キネマティックシミュレーションの実行を初期化して実行するために使用されています。 run_c.__init__()
が実行される前に、x
のような属性のデフォルト値をrun_c
に割り当てます。 __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_c.states
は、彼らがタイムステップで変化するようrun_c
属性の値を記録するために使用されているリストのリストです。後でrun_c.execute()
の範囲内で、states[1]
にx
の値を格納し、タイムステップを増やしてdt
とし、速度とタイムステップを使用してx
を更新します。それはかなりシンプルなものですよね?...
ここで問題はどこから始まりますか。 run_c
のインスタンスが初めて作成され、初期化され、実行されると、完全に実行されます。しかし、私はこのシミュレーションを、JSONファイルから読み取ったリストに基づいて複数の実行を作成、初期化、実行することで運用しています。そのため、ドライバモジュールで...
from Run import run_c
def main():
...
for runEntry in runList:
currRun = run_c(runEntry)
...
...
は何が起こるかというとrun_c.states
に保存されたすべての値は、ループの各反復の後に拭かれませんということです。私はの新しいインスタンスが私がループを実行するたびに新しい情報で__init__()
を実行するように作成されていると考えました。 x
の古い値などのデータ値が、各ループの終了後も保持されるのはなぜですか?
更新:states
の値を__init__()
の空のリストに戻すコード行を追加すると、問題はなくなります。しかし、これは私がやりたいことに必要なステップではありません...それは必要ですか?
「状態」に*新しい空のリストをどれくらい頻繁に作成していますか?一度:クラスを定義している間。リストオブジェクトは新しいインスタンスごとにリセットされません。 – deceze
'states'だけが割り当てられ、使用されていないリストはありますか?私が 'self.states'と言えば、それは完全に別個の存在ですか?それとも、クラス変数よりもグローバル変数に似ていますか? –