代码之家  ›  专栏  ›  技术社区  ›  Ram Rachum

Python:选择模块的替代方法

  •  3
  • Ram Rachum  · 技术社区  · 16 年前

    我正在做我的计划, GarlicSim ,用户在其中创建一个模拟,然后他可以按自己的意愿操纵它,然后他可以将其保存到文件中。

    我最近试着实现保存功能。我遇到的自然的事情是腌制 Project 对象,它包含整个模拟。

    问题是 项目 对象还包括一个模块——即“仿真包”,它是一个包/模块,包含几个定义仿真的关键对象,主要是函数。我需要将它们与模拟一起保存,但似乎不可能对模块进行pickle,正如我在尝试pickle 项目 对象并引发异常。

    有什么办法可以克服这个限制呢?

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

    2 回复  |  直到 16 年前
        1
  •  2
  •   djc    16 年前

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

    (当然,快速的方法是保存模块的 迪克特 而不是模块本身。)

        2
  •  1
  •   Robert Kern    16 年前

    如果您有模拟包模块的原始代码,我认为它是动态生成的,那么我建议序列化它并在加载时重新构建模块。你会在 Project.__getstate__() Project.__setstate__() 方法。