2016-08-09 4 views
0

オブジェクトにモジュールへの明示的な参照が含まれていると、picklingが原因で失敗することに気付きました。なぜ機能は節水できますが、モジュールはできませんか?

しかし、そのモジュールの関数への参照を自分のオブジェクトに貼り付けると、そのオブジェクトを選択してうまくいきません。

どのようにしてPythonは関数をpickleできますが、モジュールはpickleできませんか?

+0

@Tommyモジュールはオブジェクトです – MaxB

+0

isinstance(math、object)=> True – MaxB

+0

、申し訳ありません。私は、モジュールを酸洗することの望ましい結果は何になるのですか?コード?状態? – Tommy

答えて

2

彼らはそれをサポートしていないので、 Cレベルのタイプ(そしてPythonで書かれたモジュールでさえCレベルのタイプで実装されている)は、明示的にコード化されたpickleサポートを必要とします。

moduleを酸洗いすることが許される場合には、何を酸洗すべきかを決定することはあまり容易ではない。反対側で同じ名前をインポートするのは簡単だと思われますが、実際にモジュール自体を漬けようとしている場合は、モジュールの状態をピクルしたいという心配があります。モジュールがCの拡張モジュールであり、モジュールの状態がPython自体にさらされていなくても、Cのレイヤーでのみ内部的に使用される場合は、さらに混乱します。

通常、モジュール全体ではなく特定のものを要求します(通常は状態として参照されず、トップレベルでインポートされます)。モジュールの酸洗いをサポートする利点は限られています。不明確で、彼らはそれを実行するのに気を使わなかった。

関連する問題