Не зная о объекте, но не может его восстановить

После многих игр я нашел обходное решение для какого-то странного поведения, но хотел бы понять, что происходит. Извините, если мне не хватает элементарного материала, но я довольно неопытен в python.

Так…

Я храню объект в Shove в одном скрипте и извлекаю его в другой – все работает нормально, если я использую свое обходное решение

shove_repro_class.y

  class MyClass(): def __init__(self, name ): self.name = name self.othername = "%s" % name ## <=== workaround for ## <=== self.othername = name def __repr__(self): return 'Object "%s"' % self.name 

shove_repro.py (это первый скрипт для запуска)

 from shove import Shove from shove_repro_class import MyClass location = 'file://test' # location = 'sqlite:///test.db' # this won't work any better data = Shove(location) data['somename'] = MyClass('somename') data.close() 

shove_repro2.py (это второй скрипт для запуска)

 from shove import Shove from shove_repro_class import MyClass location = 'file://test' # location = 'sqlite:///test.db' ## same remark as before data = Shove(location) print data.keys() # prints [ 'somename' ] print data[data.keys()[0]] # throws an exception in some cases (see 1. below) ! 

Пара вопросов:

  1. Если я заменил self.othername = "%s" % name на self.othername = name то я не смогу извлечь данные из Shove. Это обходное решение заняло у меня много времени, чтобы понять, и поэтому я чувствую, что есть что-то подозрительное, что мне нужно узнать, иначе я буду очень удивляться. Я думал, что, возможно, здесь есть проблема с глубокой / мелкой копией, но, учитывая, что я думаю, что строки неизменны, не должно быть никакой другой возможной копии, кроме глубокой – правильно?
  2. Независимо от моего обходного пути, как возможно, что data.keys() имеет мой ключ 'somename' но data['somename'] не работают?
  3. Похоже, что shove_repro2.py все еще работает, если MyClass явно не импортирован. Означает ли это, что объект shove сохраняет определение класса?

Thx так много!

Python - лучший язык программирования в мире.