本当に厄介なバグがあり、ついに追跡しました。
スタンドアロン スクリプトを使用して (より正確には、既に使用しています)、オブジェクトのストアを作成した後、このデータ構造をピクルします。その後、プログラムを実行するたびに、デシリアライズされたデータでメイン プログラムを初期化できます。
ただし、型チェックを使用すると、これが問題になります。pickle.dump() を実行してこのデータ構造を取得した後、オブジェクトのタイプをチェックするように設定しました。残念ながら、私がチェックできる唯一のことは、クラスの新しいリロードであり、Python はこれを別個のものとして認識します。
DEBUG: Object I am type-checking: >> Fixture {name: 'Front Desk', location: '0', desc: 'The front desk has a sign that read...'} <<
DEBUG: 一般的なゲームオブジェクト: >> ゲームオブジェクト {name: '', location: 'None', desc: '...' } <<
(オブジェクト表現が非常に似ていることがわかります。これは、一方__repr__
が他方から継承するためです。つまり、オブジェクトのインスタンスである必要があります。)
DEBUG: タイプチェックしているオブジェクトのタイプ: {class 'chimai.chimai.objects.fix.Fixture'}
DEBUG: ジェネリック GameObject のタイプ: {class 'objects.game_object.GameObject'}
DEBUG: オブジェクト I' の MRO m type-checking: ({class 'chimai.chimai.objects.fix.Fixture'}, {class 'chimai.chimai.objects.game_object.GameObject'}, {type 'object'})
DEBUG: ジェネリック GameObject の MRO : ({class 'objects.game_object.GameObject'}, {type 'object'})
(GameObject クラスの識別子はわずかに異なります。これは、最初にスタンドアロン スクリプトを実行した場所に由来します。)
DEBUG: pickled フィクスチャ タイプの ID: 173671604
DEBUG: メイン プログラムでリロードされたフィクスチャ タイプの ID: 149507748
最終結果は、ピクルス化されたデータを型チェックする方法がまったく思いつかないということです。誰かが天才的な提案を持っていない限り、私はダックタイピングになると思います.