質問: getattr(mod、name) > > AttributeError: 'module'オブジェクトに 'ClassToPickle'属性がありません > > > > -------------------------------------------------- -------------------- > > 0.001秒でラン1テスト > > > FAILED(エラー= 1) > > > 私は、問題はPythonの名前空間に関するものだと思うが、私は何が起こったのか、それを解決するために何ができるのか分からない。 どうすれば "ユニットテスト(eclipse + pydevで)"#3プログラムを正しく実行できますか? ClassToPickleをインポートする行がないコマンドラインで#3プログラムを実行しますか? 私を助けてください。
回答: これは、 `__ main __。ClassToPickle!= ClassToPickle.ClassToPickle` のように、次のように考える: `ClassToPickle.py` スクリプトでClassToPickleのクラスインスタンスをpickleしたとき、pickleモジュールはクラスへの参照をすべてピクルします。つまり、クラスが定義されたモジュール名をpickleします。 `pickle` モジュールが `__ main __をpickleすることを意味する `__ main __` にモジュールが設定されることを意味する `ClassToPickle.py`` 。 そして、pickle化されたインスタンスをロードしようとすると、 `__ main __。ClassToPickle` であり、ClassToPickleから`を使用してインポートしたクラスではなく、インスタンスのクラスが見つからなかったため失敗します。ClassToPickle` これは最新の `ClassToPickle.ClassToPickle` です。 解決策は、 `ClassToPickle.py` でダンプする代わりに、ダンプを処理する別のスクリプトを作成することです。 ``` import pickle from ClassToPickle import ClassToPickle if __name__=="__main__": p = ClassToPickle(10) pickle.dump(p, open('10.pickle', 'w')) ```