python之单例设计模式
设计模式之单例模式
单例设计模式是怎么来的?
在面向对象的程序设计中,当业务并发量非常大时,那么就会出现重复创建相同的对象,每创建一个对象就会开辟一块内存空间,而这些对象其实是一模一样的,那么有没有办法使用得内存对象只创建一次,然后再随处使用呢?单例模式就是为了解决这个问题而产生的。
实现方式:
1、创建一个类静态字段(类变量)__instance
2、创建一个静态函数,通过函数的逻辑判断 __instance 是否已存在,如不存在就将对象值赋于__instance,即__instance = 类(),否则直接返回__instance,也即创建的对象都是一样的
3、使用单例模式创建对象时直接通过类调用静态函数创建即可
#普通模式
class A(object):
def __init__(self,name,male):
self.name = name
self.name = male #实例化多个对象
obj1 = A('ben','boy')
obj2 = A('min','girl')
obj3 = A('miao','boy')
##打印内存地址,可以看到内存地址都是不一样的
print id(obj1),id(obj2),id(obj3) #单例模式
class A(object):
__instance = None
def __init__(self,name,male):
self.name = name
self.name = male
@staticmethod
def create_obj():
if not A.__instance:
A.__instance = A('ben','boy')
return A.__instance
else:
return A.__instance #单例模式实例化多个对象
obj1 = A.create_obj()
obj2 = A.create_obj()
obj3 = A.create_obj()
##打印内存地址,可以看到内存地址都是一样的
print id(obj1),id(obj2),id(obj3)
普通模式与单例模式示例代码
result :
>>> #普通模式
... class A(object):
... def __init__(self,name,male):
... self.name = name
... self.name = male
...
>>> #实例化多个对象
... obj1 = A('ben','boy')
>>> obj2 = A('min','girl')
>>> obj3 = A('miao','boy')
>>> ##打印内存地址,可以看到内存地址都是不一样的
... print id(obj1),id(obj2),id(obj3)
140230687882448 140230687882512 140230687882576
>>>
>>> #单例模式
... class A(object):
... __instance = None
... def __init__(self,name,male):
... self.name = name
... self.name = male
... @staticmethod
... def create_obj():
... if not A.__instance:
... A.__instance = A('ben','boy')
... return A.__instance
... else:
... return A.__instance
...
>>> #单例模式实例化多个对象
... obj1 = A.create_obj()
>>> obj2 = A.create_obj()
>>> obj3 = A.create_obj()
>>> ##打印内存地址,可以看到内存地址都是一样的
... print id(obj1),id(obj2),id(obj3)
140230687882832 140230687882832 140230687882832
>>>
python之单例设计模式的更多相关文章
- python小总结3(异常、单例设计模式)
一.异常 AttributeError:试图访问一个对象没有的成员[属性和方法] ValueError:值错误,传入了一个不期望的值 ImportError:无法导入模块或者包:基本上路径问题 Ind ...
- Python中的单例设计模式
1)设计模式: 是前人工作的总结和提炼.通常,被人们广泛流传的设计模式. 某一问题的特定解决方案,使用设计模式是为了可重用代码,是代码更容易被人理解, 增加代码的可用性. 2)单例设计模式: ...
- Python——单例设计模式
单例设计模式: 让类创建的对象,在系统中只有唯一的实例, 使用python类内置的__new__()方法实现,__new__()方法在创建对象时会被自动调用,通过重写__new__()方法,使得无论用 ...
- python学习【第十篇】单例设计模式
单例设计模式 目的:让类创建对象,在系统中只有唯一的实例,让每一次创建的对象返回的内存地址都是相同的. __new__方法 使用类名创建对象时,python解释器首先会调用__new__方法为对象分配 ...
- 基于PO和单例设计模式用python+selenium进行ui自动化框架设计
一)框架目录的结构 二)config包当中的config.ini文件主要是用来存项目的绝对路径,是为了后续跑用例和生成测试报告做准备然后目前的配置文件大都会用yaml,ini,excel,还有.py也 ...
- python基础--反射、元类、单例设计模式
反射:reflect,反射指的是一个对象应该具备可以检测.修改.增加自身属性的能力,反射就是通过字符串操作属性 hasattr(对象,带查询的属性名称) 判断某个对象中是否存在某个属性 getattr ...
- 【iOS 单例设计模式】底层解析与运用
[iOS 单例设计模式]底层解析与运用 一.单例设计名词解释: (官方解释)单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例.(形象比喻)程序 — 公司 单例实例 - 管理 ...
- 单例设计模式全局缓存accessToken
使用微信JS-SDK开发的小伙伴们,看文档经常会看到这样一句话:(下面是微信开发文档的一部分原话截图) 这句话就是:开发者必须在自己的服务全局缓存access_token,jsapi_ticket 下 ...
- java 单例设计模式
1.饿汉单例设计模式: 步骤 : 1.定义一个私有的静态成员变量来引用对象(私有的静态对象),设置对象唯一. 2.私有化构造方法,防止new对象. 3.创建一个公开的静态方法,返回上面的 ...
随机推荐
- Spring IOC的描述和Spring的注解(转)
Spring常用的注解 本文系转载:转载网址: http://www.cnblogs.com/xdp-gacl/p/3495887.html http://ljhzzyx.blog.163.com/b ...
- Csharp递归和循环实现折半查找
static bool whilehalf(int n) { ; //低位 ; //高位 ; while(low <= hight) { if(n> arr[c]) { low = c + ...
- leetcode Search in Rotated Sorted Array python
#Suppose a sorted array is rotated at some pivot unknown to you beforehand. #(i.e., 0 1 2 4 5 6 7 ...
- 持续集成 之 apache-continuum
作者:许振坪,http://blog.csdn.net/benkaoya 1.前言 最近在研究持续集成,摸索了很多持续集成的工具,Apache Continuum也包括其中.既然飞过,那就留下点什么吧 ...
- 动态include与静态include的区别
搬一下以前写的 个人总结: 动态INCLUDE 用jsp:include动作实现 <jsp:include page="included.jsp" flush="t ...
- Docker镜像与仓库(一)
Docker镜像与仓库(一) Docker镜像与仓库(一) 如何查找镜像? Docker Hub https://registry.hub.docker.com docker search [OPTI ...
- php正则的使用[替换,匹配]
// 隐藏电话的中间四位 echo parseMobile('15836365252'); function parseMobile($mobile, $start = 4, $len = 4){ $ ...
- Thinkphp的页面判断
目前在做的系统中,涉及到了前端页面的判断,比如性别在数据库中存储为0或1,而页面显示应该为“男”或“女”,这里就需要用到页面判断. 比如, <volist name="st" ...
- jquery判断图片是否加载完毕
来源: <http://www.2cto.com/kf/201409/331234.html> 利用图片没有加载完成的时候,宽高为0.我们很容易判断图片的一个加载情况.如下: 思路:判断图 ...
- codeforces 652E . Pursuit For Artifacts 强连通分量
题目链接 题目大意: 给一个图, n个点m条边, 某些边上面有权值. 一条边只能走一次, 给两个点s, t. 问你, 从s到t能否经过有权值的边. 首先肯定要缩点, 然后看同一个连通分量里面的边, 是 ...