mi código(yo era incapaz de usar ‘pepinillo’):

class A(object):
    def __getstate__(self):
        print 'www'
        return 'sss'
    def __setstate__(self,d):
        print 'aaaa'

import pickle
a = A()
s = pickle.dumps(a)
e = pickle.loads(s)
print s,e

de impresión :

www
aaaa
ccopy_reg
_reconstructor
p0
(c__main__
A
p1
c__builtin__
object
p2
Ntp3
Rp4
S'sss'
p5
b. <__main__.A object at 0x00B08CF0>

quien me puede decir cómo utilizar.

InformationsquelleAutor zjm1126 | 2010-01-07

3 Comentarios

  1. 4

    ¿Qué estás tratando de hacer? A mí me funciona:

    class A(object):
        def __init__(self):
            self.val = 100
    
        def __str__(self):
            """What a looks like if your print it"""
            return 'A:'+str(self.val)
    
    import pickle
    a = A()
    a_pickled = pickle.dumps(a)
    a.val = 200
    a2 = pickle.loads(a_pickled)
    print 'the original a'
    print a
    print # newline
    print 'a2 - a clone of a before we changed the value'
    print a2
    print 
    
    print 'Why are you trying to use __setstate__, not __init__?'
    print

    Así que esta va a imprimir:

    the original a
    A:200
    
    a2 - a clone of a before we changed the value
    A:100

    Si usted necesita setstate:

    class B(object):
        def __init__(self):
            print 'Perhaps __init__ must not happen twice?'
            print
            self.val = 100
    
        def __str__(self):
            """What a looks like if your print it"""
            return 'B:'+str(self.val)
    
        def __getstate__(self):
            return self.val
    
        def __setstate__(self,val):
            self.val = val
    
    b = B()
    b_pickled = pickle.dumps(b)
    b.val = 200
    b2 = pickle.loads(b_pickled)
    print 'the original b'
    print b
    print # newline
    print 'b2 - b clone of b before we changed the value'
    print b2

    que imprime:

    Why are you trying to use __setstate__, not __init__?
    
    Perhaps __init__ must not happen twice?
    
    the original b
    B:200
    
    b2 - b clone of b before we changed the value
    B:100
  2. 3

    Que son capaces de pickle (es decir, este código funciona como debería). Sólo se parece a obtener un resultado, que usted no espera. Si usted espera lo mismo de ‘salida’, try:

    import pickle
    a = A()
    s = pickle.dumps(a)
    e = pickle.loads(s)
    print s, pickle.dumps(e)

    Su ejemplo no lo es, bueno, un típico «decapado’ ejemplo. Generalmente en escabeche objetos se guardan en algún lugar de forma persistente o envía a través del cable. Ver, por ejemplo,pickletest.py: http://www.sthurlow.com/python/lesson10/.

    Hay usos avanzados de pickling, véase, por ejemplo, David Mertz objeto XML seriación artículo: http://www.ibm.com/developerworks/xml/library/x-matters11.html

  3. 0

    En pocas palabras, en tu ejemplo, e iguala.

    No tiene que preocuparse por estos strang cadenas, se puede vertederos de estas cadenas para guardar en cualquier lugar, sólo recuerde que cuando usted los carga, tiene ‘un’ objeto de nuevo.

Dejar respuesta

Please enter your comment!
Please enter your name here