[PYTHON] Probleme beim Beizen einer Instanz

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

Recommended Posts

Probleme beim Beizen einer Instanz
Was ist eine Instanzvariable?