单例模式(Singleton Pattern)是一种经常使用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。即在整个程序或系统运行过程当中一个类只能实例化一个对象。html
好比,一般服务器程序的配置信息会存放在一个文件中,经过一个配置类进行读取,在程序运行过程当中不少地方都须要配置信息,此时若是每次读取配置信息的时候都实例化一个类,会形成资源浪费,因此此类配置类基本都只实例化一个对象。python
Python 中有不少实现单例模式的方法,这里主要说明两种方法。设计模式
能够经过改变 __new__ 方法来控制实例的建立过程。服务器
class Singleton(object): _instance = None def __new__(cls, *args, **kw): if not cls._instance: cls._instance = super(Singleton, cls).__new__(cls, *args, **kw) return cls._instance class MyClass(Singleton): a = 1
将类的实例和一个类变量 _instance 关联起来,若是 cls._instance 为 None 则建立实例,不然直接返回 cls._instance 。函数
执行结果以下:设计
>>> one=MyClass() >>> two=MyClass() >>> one==two True >>> one is two True >>> id(one),id(two) (2068174505184, 2068174505184)
其实,Python 的模块就是自然的单例模式,由于模块在第一次导入时,会生成 .pyc 文件,当第二次导入时,就会直接加载 .pyc 文件,而不会再次执行模块代码。所以,咱们只需把相关的函数和数据定义在一个模块中,就能够得到一个单例对象了。若是咱们真的想要一个单例类,能够考虑这样作:code
# mysingleton.py class My_Singleton(object): def foo(self): pass my_singleton = My_Singleton()
将上面的代码保存在文件 mysingleton.py 中,而后这样使用:htm
from mysingleton import my_singleton my_singleton.foo()
参考连接:https://www.cnblogs.com/yuanchenqi/articles/8323452.html
对象