***怠惰な男のスタイルは、方法によってシングルトンを達成することです。私はそれをあまり使用しないので、ここで空腹の男のスタイルを書きます。怠惰な男のスタイルは後で作ります。 ***
シングルトンパターンのコア機能は、クラスにそのタイプのオブジェクトが1つだけあることを確認することです。オブジェクトが呼び出されすぎたときに過度のメモリ消費を回避するために、シングルトンモードを使用できます。
pythonでオブジェクトを作成すると、 __new__
メソッドが呼び出され、作成されたオブジェクトにメモリスペースが割り当てられ、オブジェクトへの参照が返されます。この参照は、インスタンス化のために __init__
関数に渡されます。
通常、** new **メソッドを呼び出す必要はありません。この手順は、シングルトンを使用する場合に必要です。 ** new **メソッドを書き直すときは、現在のインスタンスのクラスclsを返す必要があります: return super().__ new __(cls)
。割り当てられたメモリスペース参照を取得したら、オブジェクトのインスタンス化を開始します。コードは次のように簡単に記述できます。
classClassObj(object):
def __new__(cls):print("メモリを割り当てるには")returnsuper().__new__(cls)
def __init__(self):print("初期化を開始します")
cobj =ClassObj()
結果は次のとおりです。
ただし、上記のコードはシングルトンモードを実装していません。現時点では、上記のコードを変更する必要があります。
** new **メソッドを使用する場合は、インスタンス化されているかどうかを確認してください。
classClassObj(object):
instance=None
def __new__(cls):if cls.instance is None:
cls.instance=super().__new__(cls)print("メモリを割り当てるには")else:print("すでに割り当てられています")return cls.instance
def __init__(self):print("すでに割り当てられています")
cobj =ClassObj()
cobj1 =ClassObj()
上記のコードは、割り当てられたスペース参照を格納するために使用されるClassObjのメンバー変数インスタンスを定義し、最後に__new__メソッドでインスタンスを返します。このタイプのオブジェクトが初めて作成され、インスタンスがNoneであると仮定すると、インスタンス化されます。 Noneでない場合は、割り当てられたことを示すプロンプトが表示され、作成のためにスペースが再度割り当てられることはありません。結果は次のとおりです。
上記の結果は、オブジェクトが初めて作成されたときにのみスペースを割り当て、オブジェクトの作成後にスペースは作成されません。
このとき、クラスオブジェクトを直接出力して、スペースを表示することもできます。
cobj =ClassObj()
cobj1 =ClassObj()print(cobj)print(cobj1)
結果は次のようになります。
Recommended Posts