У меня есть куча File
объектов и куча Folder
объектов. Каждая папка имеет файлы list
. Теперь, иногда мне хотелось бы найти в какой папке какой-то файл. Я не хочу проходить через все папки и файлы, поэтому создаю папку dict
file ->.Использовать python 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
Проблема в том, что файлы являются изменяемыми объектами. Это приложение основано на факте. Я изменяю их свойства, и графический интерфейс уведомляется и обновляется соответствующим образом. Конечно, вы не можете помещать изменяемые объекты в dicts. Так что я пытался первым, чтобы сгенерировать хэш на основе текущего содержания, в основном:
def __hash__(self):
return hash((self.title, ...))
Это не работа, конечно, потому что, когда содержимое объекта изменился его хэш (и, таким образом, его личность) изменился, и все перепуталось. Мне нужен объект, который сохраняет свою личность, хотя его содержимое меняется. Я пробовал разные вещи, например, делать __hash__
return id(self)
, переопределяя __eq__
и так далее, но так и не нашел удовлетворительного решения. Одно из осложнений состоит в том, что вся конструкция должна быть подбираемой, поэтому мне нужно будет хранить id
при создании, так как это может измениться при травлении, я думаю.
Поэтому я в основном хочу использовать идентификатор объекта (а не его состояние) для быстрого поиска данных, связанных с объектом. На самом деле я нашел очень хорошее pythonic обходное решение для своей проблемы, которое я мог бы опубликовать в ближайшее время, но я хотел бы посмотреть, будет ли кто-то еще придумать решение.
Атрибут файлового объекта, сообщающий вам, в какой папке они не являются параметрами? – Jblasco
Согласовано с Jblasco. Старайтесь иметь уникальный атрибут каждый раз, когда вы создаете новый объект File – Paco
@Jblasco: Да, это мертвое простое питоническое обходное решение, с которым я пошел :-). Тем не менее, мне все еще интересно, есть ли способ сделать это с помощью внешнего dict. Одна причина: могут быть разные классы папок (каталоги, теги, интеллектуальные поиски). Я должен добавить специальный атрибут для каждого вида. – jdm