我有一個名爲run_c
的類,它正在用於初始化和執行運動仿真的運行。在執行run_c.__init__()
之前,我將默認值分配給run_c
的屬性,例如x
。所有__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()
內,我將x
值存儲在states[1]
中,增加時間步dt
,並使用速度和時間步更新x
。這很簡單的東西,對不對?...
雖然這是問題的開始。 run_c
的實例第一次被創建,初始化和執行,它運行完美。但是,我正在通過創建,初始化和執行基於JSON文件讀取列表的多個運行來操作此模擬。因此,駕駛員模塊中...
from Run import run_c
def main():
...
for runEntry in runList:
currRun = run_c(runEntry)
...
...
什麼情況是,已存儲在run_c.states
的所有值沒有得到循環的每次迭代後擦拭。我認爲每次運行循環時都會創建run_c
的新實例,以執行新增信息的__init__()
。爲什麼數據值(例如x
的舊值在每個循環結束後保留)?
更新:當我添加一行代碼將states
的值重置回__init__()
中的空列表時,問題就消失了。但是,這不應該是我想要做的必要步驟...應該嗎?
你多久創建一個* states,新的空*列表?一次:定義類時。列表對象不會爲每個新實例重置。 – deceze
那麼列表中的'states'只能被分配並且從不使用?當我提到'self.states'時,它是一個完全獨立的實體嗎?或者它更類似於全局變量而不是類變量? –