私はたくさんのFile
オブジェクトを持っていFolder
ます。各フォルダにlist
はファイルがあります。ここで、特定のファイルがどのフォルダーにあるかを検索したいことがあります。すべてのフォルダーとファイルをトラバースしたくないので、検索dict
ファイル -> フォルダーを作成します。
folder = Folder()
myfile = File()
folder_lookup = {}
# This is pseudocode, I don't actually reach into the Folder
# object, but have an appropriate method
folder.files.append(myfile)
folder_lookup[myfile] = folder
問題は、ファイルが変更可能なオブジェクトであることです。私のアプリケーションは事実に基づいて構築されています。それらのプロパティを変更すると、それに応じて GUI が通知され、更新されます。もちろん、変更可能なオブジェクトを辞書に入れることはできません。だから私が最初に試みたのは、基本的に現在のコンテンツに基づいてハッシュを生成することです:
def __hash__(self):
return hash((self.title, ...))
オブジェクトのコンテンツが変更されると、そのハッシュ (したがってその ID) が変更され、すべてが台無しになるため、これはもちろん機能しませんでした。私が必要としているのは、内容が変わってもアイデンティティを保持するオブジェクトです。__hash__
returnを作成したりid(self)
、オーバーライドしたりなど、さまざまなことを試し__eq__
ましたが、満足のいく解決策は見つかりませんでした。複雑なことの 1 つは、構造全体がピッケル可能でなければならないことです。つまり、ピッケルid
時に変更される可能性があるため、作成時に保存する必要があるということです。
したがって、基本的には、オブジェクトに関連するデータをすばやく検索するために、オブジェクトの ID (状態ではなく) を使用したいと考えています。私は実際に私の問題に対する本当に素晴らしいPythonicの回避策を見つけました。これはすぐに投稿するかもしれませんが、他の誰かが解決策を考え出すかどうかを知りたいです.