Algo que creia sencillo, se me esta complicando o yo no pillo el concepto. Con el modulo pickle de Python se pueden guardar o serializar objetos. Ya lo probe en su dia con listas o objetos de ese tipo. La cosa es que pensaba que se podria realizar igualmente con objetos (instancias) creadas por nosotros. Y quizas se pueda, pero no doy con la tecla.
La idea es crear una clase y de ella instanciar un objeto simple. Con un estado basico. Luego lo grabamos en disco con el modulo pickle y cuando le deseamos recuperar debe volver con ese estado.
Algo simple seria asi:
Código Python:
Ver original
class Humano: def __init__(self, nombre): self.nombre = nombre def mostrarNombre(self): print(self.nombre)
Instanciamos:
Código Python:
Ver original
persona = Humano('John')
Y yo pensaba que haciendo esto se guardaba el objeto/instancia:
Código Python:
Ver original
with open('objeto.bin', 'wb') as fichero: pickle.dump(persona, fichero)
Que ciertamente se guarda, aunque no se bien que. Ya que al leerlo de esta manera (seguro que incorrecta por mi parte) no me devuelve el objeto grabado en disco:
Código Python:
Ver original
with open('objeto.bin', 'rb') as persona: pickle.load(persona)
En todo caso me devuelve:
Código Python:
Ver original
<_io.BufferedReader name='objeto.bin'>
Intuyo incrongruencias en el uso de pickle por mi parte. Pero no se bien como recuperar el objeto con sus estados de nuevo. O como de deberia modificar el codigo para guardar y recuperar dicha instancia con sus estados que fueron grabados.
Imaginemos que modificamos el objeto:
Código Python:
Ver original
persona.nombre = 'Juan'
Pues me gustaria que al hacer el load con pickle el atributo de nombre volviera a ser 'John' que fue como se grabo a disco ¿Esto se puede hacer?
Gracias!
EDITO:
Podria ser una posible solucion asignar al metodo load de pickle el nombre el objeto asi?
Código Python:
Ver original
with open('objeto.bin', 'rb') as fichero: persona = pickle.load(fichero)