本文共 1139 字,大约阅读时间需要 3 分钟。
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): pass2. 使用装饰器
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__ 即可。
转载地址:http://qafob.baihongyu.com/