22
Pythonでのシングルトンの作成
この質問は、シングルトンデザインパターンが望ましいかどうか、アンチパターンであるかどうか、または宗教戦争の場合ではなく、このパターンがPythonで最もPython的に実装される方法について議論するためのものです。この場合、私は「ほとんどのpythonic」を「最小の驚きの原則」に従うことを定義します。 シングルトンになる複数のクラスがあります(私のユースケースはロガー用ですが、これは重要ではありません)。単に継承したり装飾したりできるときに、追加されたガンフを使用していくつかのクラスを散らかしたくありません。 最良の方法: 方法1:デコレーター def singleton(class_): instances = {} def getinstance(*args, **kwargs): if class_ not in instances: instances[class_] = class_(*args, **kwargs) return instances[class_] return getinstance @singleton class MyClass(BaseClass): pass 長所 デコレータは、多くの場合、複数の継承よりも直感的な方法で追加されます。 短所 MyClass()を使用して作成されたオブジェクトは真のシングルトンオブジェクトですが、MyClass自体はクラスではなく関数なので、そこからクラスメソッドを呼び出すことはできません。またためm = MyClass(); n = MyClass(); o = type(n)();、その後m == n && m != o && n != …