Python Singleton(シングルモード)実装
1388 ワード
1.リロード_new__方法
2.アクセサリーを使う
3.pythonによるmodule管理の仕組み
----各pythonプロセスでは、moduleは唯一の単一の例です(importはどこでも何回もimportします).
4. share instance property
共有__dict__ できます.
class Singleton(object):
def __new__(cls, *args, **kwargs):
''' A pythonic singleton '''
if '_inst' not in vars(cls):
cls._inst = super().__new__(cls, *args, **kwargs)
return cls._inst
def __init__(self, *args, **kwargs):
pass
2.アクセサリーを使う
class SingletonDecorator(object):
def __init__(self, cls):
self._cls = cls
self._inst = None
def __call__(self, *args, **kwargs):
''' Over __call__ method. So the instance of this class
can be called as a function. '''
if not self._inst:
self._inst = self._cls(*args, **kwargs)
return self._inst
class DemoCls(object):
pass
DemoCls = SingletonDecorator(DemoCls)
# After this the DemoCls is bind with a SingletonDecorator instance
a = DemoCls()
b = DemoCls()
3.pythonによるmodule管理の仕組み
----各pythonプロセスでは、moduleは唯一の単一の例です(importはどこでも何回もimportします).
import sys
class MyCls(object):
def __init__(self, *args, **kwargs):
pass
sys.modules[__name__] = MyCls()
# After this statement, the test module is bind with a MyCls instance
# If you import this module in other module,
# test is a MyCls instance actually.
4. share instance property
共有__dict__ できます.