Je voulais enregistrer l'instance entière, j'ai donc utilisé pickle, mais les variables membres du tableau (__hoge dans le code) n'ont pas pu être enregistrées correctement. Cela ne fonctionne pas avec sample1.py et cela fonctionne avec sample2.py. Je ne sais pas pourquoi, mais il semble que l'ajout et l'affectation sont différents.
Si vous connaissez les détails, veuillez commenter.
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