先认识下什么是单例模式,可以参考前人的优秀分析https://blog.csdn.net/lovelion/article/details/9319181
总结起来说,当我们在代码中频繁的创建和删除对象时会消耗大量资源,拖慢运行效率,如果这些对象是重复的,那么完全不必如此,只需要保持一个对象即可
实现上就需要全局在例化该对象时只例化一次,后续例化及使用都返回这个对象
下面用Python的几种方法来实现单例模式
1、在类的构造函数中实现
python中的类的构造函数是cls.__new__(),在该函数中维持一个全局对象即可
1 #coding:utf-8 2 3 class M(): 4 _singleInstance = None 5 6 def __new__(cls,*a,**k): 7 if not cls._singleInstance: 8 cls._singleInstance = object.__new__(cls, *a, **k) 9 return cls._singleInstance 10 11 def __init__(self): 12 pass 13 ...
__new__构造函数返回一个实例对象,object是Python所有类的基类,该方法也可以在基类上实现让子类继承
2、使用装饰器
python中使用装饰器是比较灵活的方式,可以不修改原有类的代码结构,只添加功能,具体实现方式如下
1 #coding:utf-8 2 from functools import wraps 3 4 5 def Singleton(cls): 6 instances = {} 7 8 @wraps(cls) 9 def _singleton(*args, **kwargs): 10 if cls not in instances: 11 instances[cls] = cls(*args, **kwargs) 12 return instances[cls] 13 return _singleton 14 15 @Singleton 16 class M(): 17 def __init__(self): 18 pass 19 ...
多线程下的方式还未进行过验证,暂不讨论
标签:__,Python,instances,单例,new,设计模式,def,cls From: https://www.cnblogs.com/zhangcheng2020/p/16645367.html