当前位置: 首页 > 后端技术 > Python

“Python的单例模式有四种写法,你知道吗?”——孔乙己

时间:2023-03-26 12:05:13 Python

什么是单例模式单例模式(SingletonPattern)是最简单的设计模式之一。这种类型的设计模式是一种创建模式,它提供了一种创建对象的最佳方式。此模式涉及一个类,该类负责创建自己的对象,同时确保只创建一个对象。此类提供了一种直接访问其唯一对象的方法,而无需实例化此类的对象。注意:1.一个单例类只能有一个实例。2.单例类必须创建自己的唯一实例。3.单例类必须将这个实例提供给所有其他对象。使用场景:1.需要产生唯一的序列号。2、WEB中的计数器不需要每次刷新都加入数据库,先用单实例缓存。3.创建的一个对象需要消耗太多的资源,比如I/O和数据库的连接。代码实现1在__init__()之前调用__new__方法__new__()生成实例对象。利用该方法的特点和类的属性,可以实现设计模式的单例模式。这块如果看不懂,可以查看我之前的文章:Python类中__new__和__init__的区别classSingleton(object):def__new__(cls,*args,**kw):ifnothasattr(cls,'_instance'):orig=super(Singleton,cls)cls._instance=orig.__new__(cls,*args,**kw)returncls._instanceclassMyClass(Singleton):a=12创建实例时的共享属性点所有实例的__dict__到同一个字典,因此它们具有相同的属性和方法。classBorg(object):_state={}def__new__(cls,*args,**kw):ob=super(Borg,cls)。__new__(cls,*args,**kw)ob.__dict__=cls._statereturnobclassMyClass2(Borg):a=13装饰器版本defsingleton(cls):instances={}defgetinstance(*args,**kw):ifclsnotininstances:instances[cls]=cls(*args,**kw)returninstances[cls]returngetinstance@singletonclassMyClass:...4import方法是一个自然的单例类作为python模块Exampleschemamysingleton.pyclassMy_Singleton(object):deffoo(self):passmy_singleton=My_Singleton()#使用frommysingletonimportmy_singletonmy_singleton.foo()验证我们可以看到类对象和内存id()是同一个参考文档https://www.runoob.com/design...