单例模式:多次实例化的结果指向同一实例
一,单例模式实现方式一
import settings
class MySQL:
__instance = None
def __init__(self,ip,sport):
self.ip = ip
self.port = port
@classmethod
def from_conf(cls):
if cls.__instance is None:
cls.__instance = cls(settings.IP,settings.PORT)
return cls.__intance
二,单例模式实现方式二
import settings
def singleton(cls):
_instance=cls(settings.IP,settings.PORT)
def wrapper(*args,**kwargs):
if args and kwargs:
obj = cls(*args,**kwargs)return obj
return _intance
return wrapper
@singleton
clas MySQL:
def __init__(self,ip,port):
self.ip = ip
self.port = port
三,单例模式实现方式三
import settings
class Mymeta(type):
def __init__(self,class_name,class_bases,class_dic):
self.__instance = self(settings.IP,settings.PORT)
def __call__(self,*args,**kwargs):
if args and kwargs:obj = self..__new__(self)
self.__init__(obj,*args,**kwargs)
return obj
else:
return self.__instance
class MySQL(metaclass = Mymeta):
def __init__(self,ip,port):
self.ip = ipself.port = port
四,单例模式实现方式四
这种方式主要导入模块,首先在模块中写下:
import settings
class MySQL:
print('run.....')
def __init__(self,ip,port):
self.ip = ip
self.port = port
instance = MySQL(settings.IP,settings.PORT)
然后在Py文件中写下:
def fi():
from singleton import instance
print(instance)
def f2():
from singleton import instance,Mysql
print(instance)
obj= MySQL("1.1.1.1",3302)
print(obj)
f1()
f2()