AttributeError lors du démontage d'un objet
Je suis en train de pickle une instance d'une classe dans un module, et unpickle dans une autre.
Voici où j'ai cornichon:
import cPickle
def pickleObject():
object = Foo()
savefile = open('path/to/file', 'w')
cPickle.dump(object, savefile, cPickle.HIGHEST_PROTOCOL)
class Foo(object):
(...)
et voici où j'essaie de unpickle:
savefile = open('path/to/file', 'r')
object = cPickle.load(savefile)
Sur la deuxième ligne, je reçois AttributeError: 'module' object has no attribute 'Foo'
Quelqu'un voit ce que je fais mal?
source d'informationauteur Max
Vous devez vous connecter pour publier un commentaire.
class Foo
doit être importable par le même chemin dans le unpickling environnement, de sorte que la marinés objet peut être réintroduit.Je pense que votre problème est que vous définissez
Foo
dans le module que vous sont en cours d'exécution principale (__name__ == "__main__"
). Cornichon va sérialiser le chemin (pas la classe de l'objet/définition!!!) pourFoo
comme étant dans le module principal.Foo
n'est pas un attribut de la principale unpickle script.Dans cet exemple, vous pouvez redéfinir
class Foo
dans le unpickling script et il devrait unpickle l'amende juste. Mais le but est vraiment d'avoir une bibliothèque commune qui est partagé entre les deux scripts qui seront disponibles par le même chemin. Exemple: définirFoo
dans foo.pyExemple Simple:
$PROJECT_DIR/foo.py
$PROJECT_DIR/picklefoo.py
$PROJECT_DIR/unpicklefoo.py
Jeremy Brown avait le droit de réponse, en voici un de plus concret à la version de ce même point:
et:
tels que
Foo
vit dans le même espace de noms dans chaque morceau de code.