Python Singleton(单例模式)实现

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的机制

            ---- 在每个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__ 即可。

你可能感兴趣的:(Python Singleton(单例模式)实现)