2009-08-26 105 views
2

我正在使用我的程序GarlicSim,用戶在其中創建一個模擬,然後他可以根據需要操作它,然後將其保存到文件中。Python:酸洗模塊的替代品

我最近嘗試過實施保存功能。發生在我身上的自然事情是醃製包含整個模擬的Project對象。

問題是,Project對象還包含一個模塊 - 即「模擬程序包」,它是一個程序包/模塊,其中包含幾個用於定義模擬的關鍵對象,主要是函數。我需要將它們與模擬一起保存,但似乎無法醃製一個模塊,就像我試圖醃製Project對象時看到的那樣,並且引發了異常。

什麼是解決該限制的好方法?

(我也應該注意到,仿真軟件包被程序動態進口。)

回答

1

如果您對仿真包模塊,我相信是動態生成的原代碼,然後我會建議序列化並在加載時重建模塊。您可以在Project.__getstate__()Project.__setstate__()方法中執行此操作。

2

如果項目以某種方式引用了需要的東西的模塊,這聽起來像您可能想要將該模塊的使用重構到模塊中的類中。無論如何,這往往是更好的,因爲使用模塊的東西聞起來很胖。根據我的經驗,這樣的應用程序結構只會導致麻煩。

(當然,快速的出路是節約模塊的字典,而不是模塊本身的。)

+0

你的意思,而不是引用的動態導入模塊,參考裏面的定義的類動態導入模塊? – 2009-08-26 19:44:15

+0

是的;動態實例化類比動態地導入模塊更清潔。 – djc 2009-08-26 19:48:59

+0

這很有趣。但我認爲這有點問題。我的程序工作的方式是用戶選擇要導入的模擬包。也就是說,針對不同類型的模擬有預先編寫的模擬軟件包(例如,一個用於牛頓物理,一個用於遊戲理論...)。你是否建議我在這些預先編寫的軟件包中定義一個類,並讓所有對象成爲它的屬性? – 2009-08-26 19:53:08