Supongamos que tengo una definición simple clase de Python en un archivo myClass.pyla salmuera de clases personalizadas
class Test:
A = []
Y también tengo dos scripts de prueba. La primera secuencia de comandos crea un objeto de tipo Prueba, rellena la matriz A y guarda el resultado en un archivo. Inmediatamente lo deshace del archivo y la matriz todavía está poblada. La segunda secuencia de comandos simplemente se desmarca del archivo y la matriz no está poblada (es decir, A == []). ¿Por qué es esto?
test1.py
import myClass
import pickle
x = myClass.Test()
for i in xrange(5):
x.A.append(i)
f = open('data', 'w')
pickle.dump(x,f)
f.close()
f = open('data')
y = pickle.load(f)
f.close
print y.A
y test2.py
import myClass
import pickle
f = open('data')
y = pickle.load(f)
f.close
print y.A
¿Quiere decir esto que si se hubiera conservado en vinagre la propia clase, 'pickle.dump (Prueba)', y luego unpickled la clase, se habría conseguido la lista correcta 'A' atrás en ambos casos? – BallpointBen
@BallpointBen, no, no preservaría el atributo de clase, según [what-can-be-pickled-and-unpickled] (https://docs.python.org/3/library/pickle.html#what- can-be-pickled-and-unpickled): "las clases se decaparán por referencia nombrada, por lo que se aplican las mismas restricciones en el entorno de desapilado. Tenga en cuenta que ninguno de los códigos o datos de la clase está encurtido" – jdi