【デザインパターン勉強】Singletonメソッド

ざっくり概要

このパターンの目的は 一つのクラスに複数のインスタンスを作らないようにすることです。

利用シーン... パスワード管理のメソッドなど管理が厳重にする必要があるメソッドを管理する時に使うんでしょうかね。。

コード

class Singleton:
    initial_class_name = None
    
    # クラスインスタンス化した際、__new__→__init__が呼び出される。
    def __init__(self):
        print("init")
    
    def __new__(self):
        
        if Singleton.initial_class_name is None:
            print("new")
            Singleton.initial_class_name = super().__new__(self)
        
        return Singleton.initial_class_name

if __name__ == '__main__':
    a = Singleton() #こんな感じで出力→<__main__.Singleton object at 0x106614438>
    b = Singleton() #↑と同じ。<__main__.Singleton object at 0x106614438>
    print(a)
    print(b)
    print(a is b)
    

ざっくり解説。

classをインスタンス化した際にクラス変数(initial_class_name)をつけておくことで フラグ(インスタンスを生成したかどうか)として機能させています。

今回は参考URLが非常に秀逸だったのであまり語ることはないです。。

参考URL

http://blanktar.jp/blog/2016/07/python-singleton.html