シングルトンを実装しようとしていますが、モジュールをインポートするときに問題が発生しています。私のセットアップは次のとおりです。Python 2.7 を使用しています。
モジュール 1
class SingletonClass(object):
def __new__(self, *args, **kwargs):
if not self._instance:
self._instance = super(SingletonClass, self).__new__(
self, *args, **kwargs)
return self._instance
print SingletonClass() #OUTPUT: 0x00000000030F1630
print SingletonClass() #OUTPUT: 0x00000000030F1630 (Good, what I want)
モジュール 2
import SingletonClass
class AnotherClass:
print SingletonClass.SingletonClass() #OUTPUT: 0x0000000003292208
モジュール内でシングルトンは機能していますが、別のモジュールでは、シングルトンは最初のモジュールと同じオブジェクトを返しません。理由はありますか?
編集
今のところ、動作することがわかった唯一のものを掲載します。これにはもっと良い解決策があると確信していますが、これは根本的な問題が何であるかをよりよく伝えていると思います。
モジュール 1
class SingletonParent(object):
_instance = None
def __new__(self, *args, **kwargs):
if not self._instance:
self._instance = super(SingletonParent, self).__new__(
self, *args, **kwargs)
return self._instance
モジュール 2
import SingletonParent
class SingletonClass(object):
def __new__(self, *args, **kwargs):
if not SingletonParent.SingletonParent._instance:
SingletonParent.SingletonParent._instance = super(SingletonClass, self).__new__(
self, *args, **kwargs)
return SingletonParent.SingletonParent._instance
print SingletonClass() #OUTPUT: 0x00000000030F1630
print SingletonClass() #OUTPUT: 0x00000000030F1630
モジュール 3
import SingletonClass
class AnotherClass:
print SingletonClass.SingletonClass() #OUTPUT: 0x00000000030F1630
解決策 (編集 3)
教訓: メイン関数をシングルトンと同じモジュールに置かないでください!