我有一堆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。当然,您不能将可变对象放入 dicts 中。所以我首先尝试的是根据当前内容生成一个哈希,基本上:
def __hash__(self):
return hash((self.title, ...))
这当然行不通,因为当对象的内容改变时,它的哈希值(因此它的身份)改变了,一切都变得一团糟。我需要的是一个保持其身份的对象,尽管它的内容发生了变化。我尝试了各种方法,例如 make __hash__
return id(self)
、 overriding__eq__
等,但从未找到令人满意的解决方案。一个复杂的问题是整个结构应该是可腌制的,所以这意味着我必须id
在创建时存储,因为它可能会在腌制时发生变化,我猜。
所以我基本上是想用一个对象的身份(而不是它的状态)来快速查找与该对象相关的数据。实际上,我已经为我的问题找到了一个非常好的 pythonic 解决方法,我可能会很快发布,但我想看看其他人是否提出了解决方案。