Python Singleton(單例模式)實現

1. 重載__new__方法python

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. 使用裝飾器this

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的機制code

            ---- 在每一個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__ 便可。it

相關文章
相關標籤/搜索