python单例模式原理与创建方法实例分析


Posted in Python onOctober 26, 2019

本文实例讲述了python单例模式原理与创建方法。分享给大家供大家参考,具体如下:

1. 单例是什么

举个常见的单例模式例子,我们日常使用的电脑上都有一个回收站,在整个操作系统中,回收站只能有一个实例,整个系统都使用这个唯一的实例,而且回收站自行提供自己的实例。因此回收站是单例模式的应用。

确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是一种对象创建型模式。

2. 创建单例-保证只有1个对象

# 实例化一个单例
class Singleton(object):
  __instance = None
  def __new__(cls, age, name):
    #如果类数字__instance没有或者没有赋值
    #那么就创建一个对象,并且赋值为这个对象的引用,保证下次调用这个方法时
    #能够知道之前已经创建过对象了,这样就保证了只有1个对象
    if not cls.__instance:
      cls.__instance = object.__new__(cls)
    return cls.__instance
a = Singleton(18, "xxx")
b = Singleton(8, "xxx")
print(id(a))
print(id(b))
a.age = 19 #给a指向的对象添加一个属性
print(b.age)#获取b指向的对象的age属性

运行结果:

4391023224
4391023224
19

3. 创建单例时,只执行1次init方法

# 实例化一个单例
class Singleton(object):
  __instance = None
  __first_init = False
  def __new__(cls, age, name):
    if not cls.__instance:
      cls.__instance = object.__new__(cls)
    return cls.__instance
  def __init__(self, age, name):
    if not self.__first_init:
      self.age = age
      self.name = name
      Singleton.__first_init = True
a = Singleton(18, "xxx")
b = Singleton(8, "xxx")
print(id(a))
print(id(b))
print(a.age)
print(b.age)
a.age = 19
print(b.age)

运行结果:

139953926130600
139953926130600
18
18
19

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中的choice()方法使用详解
May 15 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
Aug 30 Python
Python神奇的内置函数locals的实例讲解
Feb 22 Python
PyQt5 实现字体大小自适应分辨率的方法
Jun 18 Python
windows上安装python3教程以及环境变量配置详解
Jul 18 Python
python常见字符串处理函数与用法汇总
Oct 30 Python
Python hashlib模块实例使用详解
Dec 24 Python
Python MOCK SERVER moco模拟接口测试过程解析
Apr 13 Python
django正续或者倒序查库实例
May 19 Python
用python计算文件的MD5值
Dec 23 Python
python字典按照value排序方法
Dec 28 Python
JAVA SpringMVC实现自定义拦截器
Mar 16 Python
Python aiohttp百万并发极限测试实例分析
Oct 26 #Python
python实现淘宝购物系统
Oct 25 #Python
DJANGO-URL反向解析REVERSE实例讲解
Oct 25 #Python
python计算n的阶乘的方法代码
Oct 25 #Python
Python OrderedDict的使用案例解析
Oct 25 #Python
python编写计算器功能
Oct 25 #Python
Python实现快速排序的方法详解
Oct 25 #Python
You might like
关于PHP结束标签的使用细节探讨及联想
2013/03/04 PHP
php die()与exit()的区别实例详解
2016/12/03 PHP
Laravel如何实现自动加载类
2019/10/14 PHP
jQuery的三种$()
2009/12/30 Javascript
bgsound 背景音乐 的一些常用方法及特殊用法小结
2010/05/11 Javascript
JSChart轻量级图形报表工具(内置函数中文参考)
2010/10/11 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
巧用局部变量提升javascript性能
2014/02/24 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
jQuery UI Bootstrap是什么?
2016/06/17 Javascript
jQuery实现为LI列表前3行设置样式的方法【2种方法】
2016/09/04 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
js时间戳和c#时间戳互转方法(推荐)
2017/02/15 Javascript
JavaScript实现自动跳转文本功能
2017/05/25 Javascript
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
Vue 拦截器对token过期处理方法
2018/01/23 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
2018/09/01 Javascript
[46:27]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第一局
2016/03/02 DOTA
Python实现的简单hangman游戏实例
2015/06/28 Python
Python之str操作方法(详解)
2017/06/19 Python
用Eclipse写python程序
2018/02/10 Python
Django中使用极验Geetest滑动验证码过程解析
2019/07/31 Python
pytorch 模拟关系拟合——回归实例
2020/01/14 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
TensorFlow绘制loss/accuracy曲线的实例
2020/01/21 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
JSF的标签库有哪些
2012/04/27 面试题
大学生入党思想汇报
2014/01/01 职场文书
党员三严三实心得体会
2014/10/13 职场文书
继续教育个人总结
2015/03/03 职场文书
2015年大班保育员工作总结
2015/05/18 职场文书
python神经网络编程之手写数字识别
2021/05/08 Python
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript