1、重载__new__方法
复制代码 代码示例:
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的机制
复制代码 代码示例:
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,www.jb200.com
# test is a MyCls instance actually.