python单例模式实例解析
本文实例为大家分享了python单例模式的具体代码,供大家参考,具体内容如下
多次实例化的结果指向同一个实例
单例模式实现方式
方式一:
importsettings classMySQL: __instance=None def__init__(self,ip,port): self.ip=ip self.port=port @classmethod deffrom_conf(cls): ifcls.__instanceisNone: cls.__instance=cls(settings.IP,settings.PORT) returncls.__instance obj1=MySQL.from_conf() obj2=MySQL.from_conf() obj3=MySQL.from_conf() print(obj1) print(obj2) print(obj3)
方式二:
importsettings defsingleton(cls): _instance=cls(settings.IP,settings.PORT) defwrapper(*args,**kwargs): ifargsorkwargs: obj=cls(*args,**kwargs) returnobj return_instance returnwrapper @singleton classMySQL: def__init__(self,ip,port): self.ip=ip self.port=port obj1=MySQL() obj2=MySQL() obj3=MySQL() print(obj1) print(obj2) print(obj3)
方式三:
importsettings classMymeta(type): def__init__(self,class_name,class_bases,class_dic): self.__instance=self(settings.IP,settings.PORT) def__call__(self,*args,**kwargs): ifargsorkwargs: obj=self.__new__(self) self.__init__(obj,*args,**kwargs) returnobj else: returnself.__instance classMySQL(metaclass=Mymeta): def__init__(self,ip,port): self.ip=ip self.port=port obj1=MySQL() obj2=MySQL() obj3=MySQL() print(obj1) print(obj2) print(obj3)
方式四:
deff1(): fromsingletonimportinstance print(instance) deff2(): fromsingletonimportinstance,MySQL print(instance) obj=MySQL('1.1.1.1','3389') print(obj) f1() f2() singleton.py文件里内容: importsettings classMySQL: print('run...') def__init__(self,ip,port): self.ip=ip self.port=port instance=MySQL(settings.IP,settings.PORT)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。