Python Singleton(单例模式)实现

来源:互联网 发布:高分三号卫星数据下载 编辑:程序博客网 时间:2024/04/27 18:45

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._instclass DemoCls(object):    passDemoCls = SingletonDecorator(DemoCls)# After this the DemoCls is bind with a SingletonDecorator instancea = DemoCls()b = DemoCls()

3. 利用python管理module的机制

import sysclass MyCls(object):    def __init__(self, *args, **kwargs):        passsys.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__ 即可。

原创粉丝点击