Problème lors du décapage d'une instance

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

Recommended Posts

Problème lors du décapage d'une instance
Qu'est-ce qu'une variable d'instance?