📖
_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