2016-08-09 46 views
0

我注意到,当我的对象包含明确的引用模块时,pickling它将因此而失败。但是,如果我将该模块的某个函数的引用粘贴到我的对象中,则可以成功挑选并取消选取。为什么可以腌制功能,但不是模块?

Python如何让pickle功能,但不是模块?

+0

@Tommy模块是对象 – MaxB

+0

isinstance(数学,对象)=>真 – MaxB

+0

正确,抱歉。我试图弄清楚,酸洗模块的理想结果是什么?代码?国家? – Tommy

回答

2

因为他们没有对它进行编码支持。 C级别类型(甚至用Python编写的模块都是用C级别类型实现的)需要明确编码pickle支持。

如果允许腌制module,确定应该腌制什么不是很容易;在另一面导入相同的名字看起来很简单,但如果你真的试图腌制模块本身,担心的是你也想尝试模块状态。如果模块是一个C扩展模块,模块状态甚至不会暴露给Python本身,只在C层内部使用,这更加令人困惑。

鉴于通常您需要某个模块的特定事物,而不是整个模块(通常不作为状态引用,只是在顶层导入),支持模块酸洗的好处是有限的,语义是不清楚,他们没有打算实施它。

相关问题