python中的单例模式
# 单例模式 节省内存,节省开销,限制只能实例化一个对象 class A: __instance = None def __init__(self, name,): self.name = name def __new__(cls, *args, **kwargs): if cls.__instance is None: obj = object.__new__(cls) # 没有对象创建一个对象 cls.__instance = obj return cls.__instance # 已经有对象返回原来的对象 ret1 = A('aaa') ret2 = A('bbb') ret3 = A('ccc') print(ret1) print(ret2) print(ret3) print(ret1.name) print(ret2.name) print(ret3.name)
补充__new__ 构造方法
# __new__ 构造方法 # 1, 类名() 执行object.__new__方法,开辟的对象空间并返回 # 2,自动执行__init__方法,将空间创给self # 3,在__init__给对象封装属性。 # object class A: def __init__(self,name): self.name = name print('in A __init__') def __new__(cls, *args, **kwargs): print('in A __new__') return object.__new__(cls) a = A('rock') print(a.name)
pytho线程安全的单例模式
# coding:utf-8 import threading def synchronized(func): func.__lock__ = threading.Lock() def lock_func(*args, **kwargs): with func.__lock__: return func(*args, **kwargs) return lock_func class Singleton(object): """ 单例模式 """ instance = None @synchronized def __new__(cls, *args, **kwargs): if cls.instance is None: cls.instance = object.__new__(cls, *args, **kwargs) return cls.instance