あるモジュールには、パラメーターの 1 つとして関数を必要とするクラスがあります。
class Foo():
def __init__(self, fun):
self.fun = fun
def call_fun(self, arg):
self.fun(arg)
別のモジュールには、このクラスのオブジェクトを作成するときに最終的にパラメーターとして渡す関数がいくつかあります。関数を簡単にカスタマイズするために、次の方法で値をバインドしています。
def sample_function(value):
return (lambda arg: arg.effect(value))
Foo オブジェクトを初期化するときは、次のように値を渡します。
foo = Foo(sample_function(5))
後で、Foo オブジェクトを含むいくつかのオブジェクトを棚上げしたいと思いますが、すぐに不可能であることが判明しました (pickle モジュールが「TypeError: can't pickle function objects」を返すため)。私は pickle のシリアル化メカニズムの限界を十分に認識しており、これらのオブジェクトを pickle 化できない理由を理解しています。代わりに、クラスを再設計するか、他のシリアライズ手段を使用したいと考えています。プロパティを保持しながら Foo オブジェクトを棚上げできるように、これを再設計するにはどうすればよいですか?