シングルトンパターンは、特定のクラスのインスタンスがただ一つだけ存在することを保証し、そのインスタンスへのグローバルなアクセスポイントを提供するデザインパターンです。このパターンは、リソースの共有や状態の管理が必要な場合に役立ちます。
Pythonでシングルトンパターンを実装する方法はいくつかありますが、ここではクラス変数を使用したシンプルな方法を紹介します。
class Singleton:
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(Singleton, cls).__new__(cls)
return cls._instance
def __init__(self, value=None):
if not hasattr(self, 'initialized'): # 初期化を一度だけ実行する
self.value = value
self.initialized = True
# 使用例
singleton1 = Singleton("First Instance")
singleton2 = Singleton("Second Instance")
print(singleton1.value) # 出力: First Instance
print(singleton2.value) # 出力: First Instance
print(singleton1 is singleton2) # 出力: True
_instance
クラス変数: クラス内にインスタンスを保持するためのクラス変数を定義します。__new__
メソッド: 新しいインスタンスを生成する際に呼び出されます。このメソッドは、インスタンスがすでに存在するかをチェックし、存在しない場合のみ新しいインスタンスを生成します。__init__
メソッド: インスタンスが初期化される際に呼び出されます。initialized
属性を使って、初期化処理が一度だけ行われるようにします。Singleton
クラスのインスタンスを二つ生成しますが、両方とも同じインスタンスを指します。singleton1
と singleton2
は同じインスタンスを指しているため、is
演算子で確認すると True
になります。シングルトンパターンは、特定の状況で非常に便利ですが、使用する際にはその影響を十分に理解する必要があります。