次の文を酸洗い。この場合、__init__
は必要ありませんが、この問題は、他の引数が属性として格納されていて、それを避けることができないOrderedDict
というより複雑なサブクラスを持つマルチプロセッシングモジュールを使用することを妨げています。 (私はPython 3.4.6を使用しました)。はOrderedDictのサブクラス
1
A
答えて
1
OrderedDict
が__reduce__
を上書きするため、__init__
または__new__
メソッドを上書きしたり、追加の属性を保存したりする場合は、上書きする必要があります。
は、あなたのケースでは、必須__init__
の引数を作った(それはdict
またはOrderedDict
には必須ではありません)ので、あなたは__reduce__
を上書きする必要があります。
import collections
class OD(collections.OrderedDict):
def __init__(self, items):
super().__init__(items)
def __reduce__(self):
state = super().__reduce__()
# OrderedDict.__reduce__ returns a 5 tuple
# the first and last can be kept
# the fourth is None and needs to stay None
# the second must be set to an empty sequence
# the third can be used to store attributes
newstate = (state[0],
([],),
None,
None,
state[4])
return newstate
これは、現在問題なく漬けすることができます。
import pickle
a = OD((('a',1), ('b', 2)))
with open('test.pickle','wb') as fout:
pickle.dump(a, fout)
with open('test.pickle','rb') as fin:
pickle.load(fin)
__init__
に設定されていない属性を使用するには、まだ正しく機能しません。
a = OD((('a',1), ('b', 2)))
a.a = 10
with open('test.pickle','wb') as fout:
pickle.dump(a, fout)
with open('test.pickle','rb') as fin:
b = pickle.load(fin)
b.a # AttributeError: 'OD' object has no attribute 'a'
上記の__reduce__
機能を変更して、3番目の引数を返す必要があります。上記の例は正しく動作します。これにより
class OD(collections.OrderedDict):
def __init__(self, items):
super().__init__(items)
def __reduce__(self):
state = super().__reduce__()
newstate = (state[0],
([],),
self.__dict__,
None,
state[4])
return newstate
:たとえば、あなたは、単に__dict__
を返すことができます。
多くのデザインは、サブクラスの動作方法によって異なります。場合によっては、2番目の引数(__init__
に渡されるもの)を介して項目を渡す方がよいでしょう。あなたの属性を設定する方法について:self.__dict__
を使用すると十分な場合もありますが、他の場合は__setstate__
を使用する方が安全です。あなたは間違いなくdocumentation of the pickle
moduleを読んで、どのアプローチがあなたにとって最適であるかを確認する必要があります。
関連する問題
- 1. DjangoのテンプレートOrderedDict
- 2. ordereddictのサブセットフィールド?
- 3. PythonのOrderedDictのアナログ?
- 4. unhashableタイプ: 'OrderedDict'
- 5. PyMySQLとOrderedDict
- 6. パンダCSV:csv to orderedDict
- 7. PythonでOrderedDict
- 8. orderedDict vs pandasシリーズ
- 9. Dictでカプセル化OrderedDict
- 10. Python OrderedDict iterable over int
- 11. OrderedDict対defaultdict対dict
- 12. OrderedDictの理解はありますか?
- 13. Pythonのdictionaryとordereddictの違い
- 14. OrderedDictの取得とpopitemのパフォーマンス
- 15. のPython 2.7.5をインポートOrderedDictはImportErrorを取得していない:OrderedDict</p> <p>という名前のモジュール私は、Python 2.7.5を使用して、プリインストールされてorderedDictモジュールを前提としています:OrderedDict
- 16. OrderedDictのサブキーにアクセスできない
- 17. PythonのソートOrderedDictキーを時系列
- 18. OrderedDictクラスのPython Updateランダムフィールド選択関数
- 19. 複数のOrderedDict辞書からPython
- 20. は、サブクラスのpython
- 21. は、サブクラスのインスタンス
- 22. はサブクラス
- 23. OrderedDictの「次の」項目を取得する方法は?
- 24. Objective-C - サブクラスのデリゲートのサブクラス
- 25. dictをOrderedDictに変換する
- 26. Python OrderedDictから値を引き出す
- 27. Funnelwebエラー、OrderedDictをインポートできません
- 28. OrderedDict欠陥があるため
- 29. csvファイルからOrderedDictを作成する
- 30. Python OrderedDictをCSVに書き込む
私は他の人に役立つだろうと思ったこの解決策を見つけたかもしれないと思います。追加: – Tom