📖

_instance = noneの役割

2024/05/23に公開

クラスの中に書かれた_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

詳細説明

  1. クラス変数 _instance = None の定義

    • これはクラス変数として定義され、初期状態ではNoneに設定されます。この変数はクラス全体で共有されます。
  2. __new__ メソッドのオーバーライド

    • __new__ メソッドはインスタンスが生成される前に呼び出される特殊メソッドです。
    • ここで、_instanceNoneの場合のみ、新しいインスタンスを作成し、それを_instanceに格納します。それ以外の場合は、既存のインスタンスを返します。
  3. __init__ メソッド

    • __init__ メソッドはインスタンスが生成された後に呼び出される初期化メソッドです。
    • シングルトンの初期化は一度だけ行われるように、initialized属性を使ってチェックします。これにより、複数回初期化されるのを防ぎます。

使用例

  • singleton1singleton2は同じインスタンスを指しており、value属性も同じです。
  • print(singleton1 is singleton2)Trueを返すことで、singleton1singleton2が同じインスタンスであることが確認できます。

このように、_instance = Noneはシングルトンパターンの一部として使われ、クラスが複数のインスタンスを持たないようにするための仕組みです。

Discussion