📖
_instance = noneの役割
クラスの中に書かれた_instance = None
は、そのクラスのシングルトンパターンを実装するための一部であることが多いです。シングルトンパターンは、あるクラスがただ一つのインスタンスしか持たないことを保証するためのデザインパターンです。このパターンは、インスタンスが重複して作られると問題が発生するような状況で役立ちます。
以下に、シングルトンパターンを実装する例を示します。
シングルトンパターンの実装例
class Singleton:
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super(Singleton, cls).__new__(cls)
# 必要ならば初期化処理を行う
return cls._instance
def __init__(self, value):
# 初期化処理
if not hasattr(self, 'initialized'):
self.value = value
self.initialized = True
# 使用例
singleton1 = Singleton(10)
singleton2 = Singleton(20)
print(singleton1.value) # 10
print(singleton2.value) # 10
print(singleton1 is singleton2) # True
詳細説明
-
クラス変数
_instance = None
の定義- これはクラス変数として定義され、初期状態では
None
に設定されます。この変数はクラス全体で共有されます。
- これはクラス変数として定義され、初期状態では
-
__new__
メソッドのオーバーライド-
__new__
メソッドはインスタンスが生成される前に呼び出される特殊メソッドです。 - ここで、
_instance
がNone
の場合のみ、新しいインスタンスを作成し、それを_instance
に格納します。それ以外の場合は、既存のインスタンスを返します。
-
-
__init__
メソッド-
__init__
メソッドはインスタンスが生成された後に呼び出される初期化メソッドです。 - シングルトンの初期化は一度だけ行われるように、
initialized
属性を使ってチェックします。これにより、複数回初期化されるのを防ぎます。
-
使用例
-
singleton1
とsingleton2
は同じインスタンスを指しており、value
属性も同じです。 -
print(singleton1 is singleton2)
がTrue
を返すことで、singleton1
とsingleton2
が同じインスタンスであることが確認できます。
このように、_instance = None
はシングルトンパターンの一部として使われ、クラスが複数のインスタンスを持たないようにするための仕組みです。
Discussion