elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [python] Objetos que se guardan y cargan solos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [python] Objetos que se guardan y cargan solos  (Leído 3,824 veces)
lnvisible


Desconectado Desconectado

Mensajes: 527



Ver Perfil
[python] Objetos que se guardan y cargan solos
« en: 6 Diciembre 2010, 23:37 pm »

Hola, estoy aprendiendo python y quiero hacer que un objeto se guarde y cargue solo, y sus subclases también. Tengo esto:

Código
  1. from pickle import load, dump
  2.  
  3. class Auto:
  4.  
  5.  def __init__(self):
  6.    try:
  7.      self.load()
  8.    except:
  9.      self.counter = 0
  10.  
  11.  def load(self):
  12.    with open(self.__class__.__name__, 'rb') as f:
  13.      self = load(f)
  14.  
  15.  def dump(self):
  16.    with open(self.__class__.__name__, 'wb') as f:
  17.      dump(self, f)
  18.  
  19. class Test(Auto):
  20.  def increment(self):
  21.    self.counter += 1
  22.    print(self.counter)
  23.    self.dump()
  24.  
  25. if __name__ == "__main__":
  26.  t = Test()
  27.  t.increment()

¿Hay algo mal?

GRacias!!


En línea

ChicoMaravilla

Desconectado Desconectado

Mensajes: 61



Ver Perfil
Re: [python] Objetos que se guardan y cargan solos
« Respuesta #1 en: 7 Diciembre 2010, 02:44 am »

¿A que te refieres con que se guarde y cargue solo?. ¿A que cuando prendes la pc ejecute eso?

PD: el comando "r", sirve para leer archivos ya existentes quizá es eso.En todo caso poner el "w" antes que la r para que cree el archivo.


En línea

lnvisible


Desconectado Desconectado

Mensajes: 527



Ver Perfil
Re: [python] Objetos que se guardan y cargan solos
« Respuesta #2 en: 7 Diciembre 2010, 07:07 am »

No, lo que quiero es que el objeto se almacene a si mismo (y no a otro) en un fichero, y que cuando vuelva a crear un objeto de esa clase no haga uno nuevo sino que lo cargue del fichero.

No puedo usar r como dices porque crearía el fichero vacío y daría un error, porque necesito que tenga un contador con un numero, ese numero se tiene que ir incrementando cada vez que se llame al script.
En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: [python] Objetos que se guardan y cargan solos
« Respuesta #3 en: 7 Diciembre 2010, 12:27 pm »

Buenas.

Lo que ocurre es que en realidad self no significa nada para Python, self se utiliza por convención, por lo cual, cuando tu haces esto ...
Código
  1. self = load(f)

... lo único que estas haciendo es modificar el valor de la variable, si pones un string, entonces será un string, pero eso no significa que el objeto ha cambiado porque de por si no es un puntero a memoria.
Lo que debes de hacer es modificar los atributos del objeto actual, con los atributos del objeto cargado :P
Código
  1. from pickle import load, dump
  2.  
  3. class Auto:
  4.  def __init__(self):
  5.    try:
  6.      self.load()
  7.    except:
  8.      self.counter = 0
  9.  
  10.  def load(self):
  11.    with open(self.__class__.__name__, 'rb') as f:
  12.      self.__dict__ = load(f).__dict__
  13.  
  14.  def dump(self):
  15.    with open(self.__class__.__name__, 'wb') as f:
  16.      dump(self, f)
  17.  
  18. class Test(Auto):
  19.  def increment(self):
  20.    self.counter += 1
  21.    print(self.counter)
  22.    self.dump()
  23.  
  24. if __name__ == "__main__":
  25.  t = Test()
  26.  t.increment()

Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
lnvisible


Desconectado Desconectado

Mensajes: 527



Ver Perfil
Re: [python] Objetos que se guardan y cargan solos
« Respuesta #4 en: 8 Diciembre 2010, 06:26 am »

GRacias!! Estaba probando con getattr y setattr pero me daba un error de weakref o algo parecido : \

He hecho otras cosillas, al final me ha quedado esto :)

Código
  1. #!/usr/bin/env python3
  2. from pickle import load, dump
  3. from os.path import exists
  4.  
  5. class Auto:
  6.  def __init__(self):
  7.    if (exists(self.__class__.__name__)):
  8.      self.load()
  9.    else:
  10.      self.start()
  11.      self.dump()
  12.  
  13.  def start(self):
  14.    pass
  15.  
  16.  def load(self):
  17.    with open(self.__class__.__name__, 'rb') as f:
  18.      self.__dict__ = load(f).__dict__
  19.  
  20.  def dump(self):
  21.    with open(self.__class__.__name__, 'wb') as f:
  22.      dump(self, f)
  23.  
  24.  def __enter__(self):
  25.    if (exists(self.__class__.__name__)):
  26.      self.load()
  27.    return self
  28.  
  29.  def __exit__(self, extype, exvalue, traceback):
  30.    if (None == extype == exvalue == traceback):
  31.      self.dump()
  32.    else:
  33.      print('oh oh...')
  34.  
  35.  
  36. class Test(Auto):
  37.  def start(self):
  38.    self.counter = 0
  39.  
  40.  def increment(self):
  41.    self.counter += 1
  42.    print(self.counter)
  43.  
  44.  
  45. if __name__ == "__main__":
  46.  with Test() as t:
  47.    t.increment()

Lo que pasa es que quiero que la clase general tenga todo lo posible, para hacer comodamente las hijas ;) que ahora son persistentes :D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programas se cierran solos en windows 8
Windows
gAb1 5 6,584 Último mensaje 8 Septiembre 2012, 00:30 am
por gAb1
Variables que no se guardan fuera de funcion (Python)
Scripting
abreu20011 3 3,357 Último mensaje 5 Octubre 2012, 16:04 pm
por abreu20011
Ayuda objetos Python
Scripting
Panic0 4 2,724 Último mensaje 20 Junio 2021, 06:28 am
por Panic0
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines