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 相关文章推荐
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
May 06 Python
Python随机生成信用卡卡号的实现方法
May 14 Python
Python中的浮点数原理与运算分析
Oct 12 Python
python中itertools模块zip_longest函数详解
Jun 12 Python
Python读取数据集并消除数据中的空行方法
Jul 12 Python
详解python中Numpy的属性与创建矩阵
Sep 10 Python
关于Python 的简单栅格图像边界提取方法
Jul 05 Python
Django 实现对已存在的model进行更改
Mar 28 Python
Django实现图片上传功能步骤解析
Apr 22 Python
无需压缩软件,用python帮你操作压缩包
Aug 17 Python
Python实现Word文档转换Markdown的示例
Dec 22 Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 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数组中的重复值的实现代码
2011/07/17 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
2006/11/30 Javascript
MooTools 1.2介绍
2009/09/14 Javascript
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
2013/03/06 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
jquery实现的一个简单进度条效果实例
2014/05/12 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
2014/08/15 Javascript
javascript 操作符(~、&、|、^、)使用案例
2014/12/31 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
jquery移动点击的项目到列表最顶端的方法
2015/06/24 Javascript
javascript仿百度输入框提示自动下拉补全
2016/01/07 Javascript
Bootstrap CSS布局之代码
2016/12/17 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
Angularjs单选框相关的示例代码
2017/08/17 Javascript
Cropper.js 实现裁剪图片并上传(PC端)
2017/08/20 Javascript
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
原生js封装的ajax方法示例
2018/08/02 Javascript
关于vue组件事件属性穿透详解
2019/10/28 Javascript
Python学习之asyncore模块用法实例教程
2014/09/29 Python
python自定义类并使用的方法
2015/05/07 Python
Python自动调用IE打开某个网站的方法
2015/06/03 Python
Python字符串匹配算法KMP实例
2015/07/18 Python
Python系统监控模块psutil功能与经典用法分析
2018/05/24 Python
Python读取表格类型文件代码实例
2020/02/17 Python
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
个人自我鉴定怎么写
2013/10/28 职场文书
物流仓管员工作职责
2014/01/06 职场文书
网上签名寄语活动留言
2014/01/18 职场文书
物理研修随笔感言
2014/02/14 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
餐厅营销的秘密:为什么老顾客会流水?
2019/08/08 职场文书
详解python字符串驻留技术
2021/05/21 Python
python中24小时制转换为12小时制的方法
2021/06/18 Python