Ich wollte die gesamte Instanz speichern, also habe ich pickle verwendet, aber die Mitgliedsvariablen des Arrays (__hoge im Code) konnten nicht richtig gespeichert werden. Es funktioniert nicht mit sample1.py und es funktioniert mit sample2.py. Ich bin mir nicht sicher warum, aber es scheint, dass Anhängen und Zuweisen unterschiedlich sind.
Wenn Sie die Details kennen, kommentieren Sie bitte.
sample1.py
# -*- coding: utf-8 -*-
import os
import pickle
class Test():
__hoge = []
__foo = ""
def __init__(self):
self.__hoge.append("hoge1")
self.__hoge.append("hoge2")
self.__hoge.append("hoge3")
self.__foo = "foo"
return
def print(self):
print(self.__hoge)
print(self.__foo)
return
if __name__ == '__main__':
pickle_path = 'dataset.pkl'
if not os.path.exists(pickle_path):
# initialize class and save pickle
test = Test()
with open(pickle_path, 'wb') as output:
pickle.dump(test, output)
test.print()
# console:
# ['hoge1', 'hoge2', 'hoge3']
# foo
else:
# load pickle
with open(pickle_path, 'rb') as output:
test = pickle.load(output)
test.print()
# console:
# [] <---- why?
# foo
sample2.py
# -*- coding: utf-8 -*-
import os
import pickle
class Test():
__foo = ""
__hoge = []
def __init__(self):
hoge = []
hoge.append("hoge1")
hoge.append("hoge2")
hoge.append("hoge3")
self.__hoge = hoge
self.__foo = "foo"
return
def print(self):
print(self.__hoge)
print(self.__foo)
return
if __name__ == '__main__':
pickle_path = 'dataset.pkl'
if not os.path.exists(pickle_path):
# initialize class and save pickle
test = Test()
with open(pickle_path, 'wb') as output:
pickle.dump(test, output)
test.print()
# console:
# ['hoge1', 'hoge2', 'hoge3']
# foo
else:
# load pickle
with open(pickle_path, 'rb') as output:
test = pickle.load(output)
test.print()
# console:
# ['hoge1', 'hoge2', 'hoge3'] <---- great!
# foo