python的单例模式

来源:互联网 发布:淘宝店铺装修免费代码 编辑:程序博客网 时间:2024/06/18 03:45

问题描述:

在开发过程中,有一些时候我们出现如下需求。如,某个服务器程序的配置信息存放在一个文件中,程序运行中多个地方需要调用修改该文件,或者在web开发中,手写orm系统。我们也可以用单例模式来控制数据库对象的生成。

解决方案一

Python 的模块就是天然的单例模式,因为模块在第一次导入时,会生成 .pyc 文件,当第二次导入时,就会直接加载 .pyc 文件,而不会再次执行模块代码。因此,我们只需把相关的函数和数据定义在一个模块中,就可以获得一个单例对象了。

解决方案二

我们知道,装饰器(decorator)可以动态地修改一个类或函数的功能。这里,我们也可以使用装饰器来装饰某个类,使其只能生成一个实例,代码如下:

def singleton(cls, *args, **kwargs):  instances = {}  def _singleton():    if cls not in instances:      instances[cls] = cls(*args, **kwargs)    return instances[cls]  return _singleton@singletonclass CMySQL():    pass
原创粉丝点击