Mementoパターン

概要

オブジェクトをセーブ(保存)する」パターンです。

Pythonのビルトイン機能で実現可能です。

例題

あるインスタンス(Hogeクラスのインスタンス)をpickle化により保存します。

サンプルコード

import pickle
filepath_pickle = "instance.pickle"


def main1():
    hoge = Hoge("huga")
    with open(filepath_pickle, mode='wb') as f:
        pickle.dump(hoge, f)
    hoge.print_hoge()


def main2():
    with open(filepath_pickle, mode='rb') as f:
        hoge2 = pickle.load(f)
    hoge2.print_hoge()


class Hoge:
    def __init__(self, hoge):
        self.hoge = hoge

    def print_hoge(self):
        print("hoge:", self.hoge)


if __name__ == "__main__":
    main1()
    print("---")
    main2()

# 出力

hoge: huga --- hoge: huga

特徴

# pickle化

pickle化は以下のコードで行うことができます。 pickle化はバイナリで行われるため、modeに”b”をつける必要があります。

import pickle
with open({ファイルのパス}, mode='wb') as f:
    pickle.dump({pickle化したい変数}, f)

# 非pickle化

非pickle化は以下のコードで行うことができます。

with open({ファイルのパス}, mode='rb') as f:
    {代入先} = pickle.load(f)

代入したあとはpickle前と同様に使用することができます。

Pythonらしく書くためのコツ

pickle化を使うことでMementoパターンを実現することができます。

クラス図

# 一般的なクラス図

一般的なクラス図(Mementoパターン)

# サンプルコードにおけるクラス図

特になし

参考URL

実践Python3

IT専科様