On Mon, Mar 7, 2011 at 8:38 AM, Rogerio Luz <rogeriosantos...@gmail.com>wrote:
> Hi All > > I'd like to pickle an object instance with all values. So I > instanciate myClass and set some values including a list with more > values (in the __init__), then dump to file. I realized that the > pickled object don't saved my new list values (saved only the > "default" value) but saved a String and an int. What I'm doing wrong? > Thanks Rogerio > > $ python3 pickler.py P > Dump: ['default', 1, 2, 3, 4, 5, 6, 7, 8, 9] TestStr 19900909 > > $ python3 pickler.py U > Load: ['default'] TestStr 19900909 > > # pickler.py > > import sys > import pickle > > class MyClass: > teste = 0 > nome = None > lista = ["default"] > > def __init__(self): > for reg in range(1,10): > self.lista.append(reg) > self.nome = "TestStr" > self.teste = 19900909 > In this definition, you are creating a class variable then appending your arguments to it. Pickling won't save class variables - only instance variables. The string and int work as you are reassigning them within the __init__ function, thereby making them instance variables. Something like: class MyClass: teste = 0 nome = None def __init__(self): self.lista = ['default'] for reg in range(1,10): self.lista.append(reg) self.nome = "TestStr" self.teste = 19900909 > #main > def main(argv): > if argv[1] == "P": > with open('myClass.pickle', 'wb') as f: > myClass = MyClass() > print("Dump:",myClass.lista, myClass.nome, myClass.teste) > pickle.dump(myClass, f, pickle.HIGHEST_PROTOCOL) > > elif argv[1] == "U": > with open('myClass.pickle', 'rb') as f: > myClass = pickle.load(f) > print("Load:",myClass.lista, myClass.nome, myClass.teste) > > if __name__ == "__main__": > main(sys.argv) > -- > http://mail.python.org/mailman/listinfo/python-list >
-- http://mail.python.org/mailman/listinfo/python-list