シングルトン
シングルトン(Singletonパターン)は、共通のデザインパターンであり、このモードの主な目的は、ということを保証することである特定のクラスが存在するインスタンスを1つだけ有します。あなたは、システム全体で、クラスのインスタンスを1つだけ表示されることができますしたい場合は、シングルトンオブジェクトが便利になることができます。
たとえば、ファイルに格納されたサーバプログラムの構成情報は、クライアント構成ファイルには、クラスのAppConfigを通じて情報を読み取ります。プログラムが実行されている場合は、設定ファイルの内容を使用する必要がたくさんある、すなわち、多くの場所は、オブジェクトのAppConfigシステムの複数のインスタンスにつながったオブジェクトのAppConfigのインスタンスを作成する必要がありますが、これはメモリの深刻な廃棄物であります資源、特に多くの場合、コンフィギュレーション・ファイルの内容。実際には、このクラスのAppConfigのように、私たちは、プログラムの実行時にオブジェクトのインスタンスが1つしかないことを願っています。
Pythonでは、私たちは、シングルモードの実施形態を実現するための様々な方法を使用することができます
モジュールのシングルトンを使用して実装されています
実際には、Pythonモジュールは、自然シングルトンパターンである最初のインポート時のモジュールは、生成されるので、 .pyc
二度目にインポートするとき、直接ロードされるファイルを .pyc
再び実行モジュールのコードなしでファイル。したがって、我々は唯一つのモジュール内のデータおよび関連する関数を定義する必要があり、対象の単一の実施形態を得ることが可能です。私たちは本当にシングルトンクラスをしたい場合は、そう考えることができます。
mysingleton.py
クラスシングルトン(オブジェクト): DEF FOO(自己): パス シングルトン=シングルトン()
上記のコードは、ファイルに格納され mysingleton.py
、使用中の他のファイルに直接オブジェクト・ファイル、シングルトンの対象であるオブジェクト内に導入されます
輸入シングルトンから
例デコレータシングルモード
DEFシングルトン(CLS): _INSTANCE = {} DEF _singleton(*引数、** kargs): いない場合_INSTANCEでCLS: _INSTANCE [CLS] =のCLS(*引数、** kargs) 戻り_INSTANCE [CLS] _singletonリターン @Singleton クラスA(オブジェクト): = 1 DEF __init __(自己、X = 0): self.x = X A1 = A(2)
__new__メソッドを使用します
クラスPerson: theradingインポートロックから ロック=ロック() _INSTANCE =なし :DEF __(CLS、* argsを、** kwargsから)__newない cls.lockとを: cls._instanceなしの場合: cls._instance =オブジェクト.__新しい__(CLS) cls._instance返し ます:def __init __(自己) のパスを