私はクラス定義するスクリプトがある場合:別の名前空間(Python)にクラスが存在するオブジェクトを解除する方法はありますか?
script = """
class myClass:
def __init__(self):
self.name = 'apple'
self.color = 'green'
"""
をして、独自の名前空間の辞書では、このスクリプトがexec:
NS = {}
exec script in NS
をして、クラスのインスタンスを作成し、それを酸洗い:
をa = NS['myClass']()
import pickle
save = pickle.dumps(a)
は今、私はそれをunpickle化しようとした場合:
私はエラーAttributeError: 'module' object has no attribute 'myClass'
を得る10
私はPythonがどこオブジェクトを再構築するために、MyClassのを見つけるために知っていないので、これは動作しないことを収集します。しかし、myClassはNS辞書に存在します。 Pickleに、ロードされているオブジェクトのクラスを見つける場所を教える方法はありますか?
これはすべての非常にきれいですが、それはどのように元の質問に答えるのでしょうか? –
@JohnYクラスをunpickleを、unpicklerの名前空間から任意のクラスのインスタンスにすることができます。 'myClass'を' foomodule.myClass'としてunpickleに設定してから、 'pickle.loads'を呼び出す前に' foomodule.myClass = NS ['myClass'] 'と言ってください。 – Borealid