3

我正在开发我的程序GarlicSim,其中用户创建了一个模拟,然后他能够根据需要对其进行操作,然后他可以将其保存到文件中。

我最近尝试实现保存功能。我很自然地想到要腌制Project包含整个模拟的对象。

问题是,该Project对象还包括一个模块——即“模拟包”,它是一个包/模块,其中包含定义模拟的几个关键对象,主要是函数。我需要将它们与模拟一起保存,但似乎不可能腌制模块,正如我在尝试腌制Project对象并引发异常时所看到的那样。

解决该限制的好方法是什么?

(我还应该注意,模拟包是在程序中动态导入的。)

4

2 回答 2

2

如果项目以某种方式引用了包含您需要的东西的模块,听起来您可能希望将该模块的使用重构为模块内的类。无论如何,这通常会更好,因为使用模块来处理东西闻起来像是一个巨大的全局。以我的经验,这样的应用结构只会带来麻烦。

(当然,快速的出路是保存模块的字典而不是模块本身。)

于 2009-08-26T19:39:48.600 回答
1

如果您有模拟包模块的原始代码,我认为它是动态生成的,那么我建议将其序列化并在加载时重建模块。您将在Project.__getstate__()andProject.__setstate__()方法中执行此操作。

于 2009-08-26T19:26:28.907 回答