python单例模式数据库连接池_Python实现单例模式的四种方式

  # 单例模式实现方式一:类方法import settings​class MySQL:__instance=Nonedef __init__(self, ip, port):self.ip = ipself.port = port​@classmethoddef from_conf(cls):if cls.__instance is None:cls.__instance=cls(settings.IP, settings.PORT)return cls.__instanceobj1=MySQL.from_conf()obj2=MySQL.from_conf()obj3=MySQL.from_conf()# obj4=MySQL('1.1.1.3',3302)print(obj1)print(obj2)print(obj3)# print(obj4)​# 单例模式实现方式二:装饰器import settings​def singleton(cls):_instance=cls(settings.IP,settings.PORT)def wrapper(*args,**kwargs):if len(args) !=0 or len(kwargs) !=0:obj=cls(*args,**kwargs)return objreturn _instancereturn wrapper​@singleton #MySQL=singleton(MySQL) #MySQL=wrapperclass MySQL:def __init__(self, ip, port):self.ip = ipself.port = port​obj1=MySQL() obj2=MySQL() obj3=MySQL() obj4=MySQL('1.1.1.3',3302) print(obj1)print(obj2)print(obj3)print(obj4)​# 单例模式实现方式三:通过元类:import settings​class Mymeta(type):def __init__(self,class_name,class_bases,class_dic):#self=MySQL这个类self.__instance=self(settings.IP,settings.PORT)​def __call__(self, *args, **kwargs):# self=MySQL这个类if len(args) != 0 or len(kwargs) != 0:obj=self.__new__(self)self.__init__(obj,*args, **kwargs)return objelse:return self.__instance​class MySQL(metaclass=Mymeta): #MySQL=Mymeta(...)def __init__(self, ip, port):self.ip = ipself.port = port​​obj1=MySQL()obj2=MySQL()obj3=MySQL()obj4=MySQL('1.1.1.3',3302)print(obj1)print(obj2)print(obj3)print(obj4)# 单例模式实现方式四:模块导入:def f1():from singleton import instanceprint(instance)​def f2():from singleton import instance,MySQLprint(instance)obj=MySQL('1.1.1.3',3302)print(obj)​f1()f2()

同步发布在小猿取经博客

小猿取经 - 博客园​www.cnblogs.com


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部