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 相关文章推荐
10种检测Python程序运行时间、CPU和内存占用的方法
Apr 01 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
Jun 06 Python
Python简单生成8位随机密码的方法
May 24 Python
Python内置模块turtle绘图详解
Dec 09 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
Jan 04 Python
python将.ppm格式图片转换成.jpg格式文件的方法
Oct 27 Python
使用python动态生成波形曲线的实现
Dec 04 Python
详解Python Opencv和PIL读取图像文件的差别
Dec 27 Python
Windows上安装tensorflow  详细教程(图文详解)
Feb 04 Python
Python如何实现小程序 无限求和平均
Feb 18 Python
Python的PIL库中getpixel方法的使用
Apr 09 Python
Python如何把字典写入到CSV文件的方法示例
Aug 23 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下使用无限生命期Session的方法
2007/03/16 PHP
显示youtube视频缩略图和Vimeo视频缩略图代码分享
2014/02/13 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
PHP下用Swoole实现Actor并发模型的方法
2019/06/12 PHP
jQuery表格行换色的三种实现方法
2011/06/27 Javascript
js函数的引用, 关于内存的开销
2012/09/17 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
JavaScript中的变量定义与储存介绍
2014/12/31 Javascript
javascript实用方法总结
2015/02/06 Javascript
jQuery子属性过滤选择器用法分析
2015/02/10 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
Angularjs中使用Filters详解
2016/03/11 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
vue2.0中goods选购栏滚动算法的实现代码
2017/05/17 Javascript
vue src动态加载请求获取图片的方法
2018/10/17 Javascript
vue实现双向绑定和依赖收集遇到的坑
2018/11/29 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
js获取form表单中name属性的值
2019/02/27 Javascript
vue如何截取字符串
2019/05/06 Javascript
详解微信小程序中var、let、const用法与区别
2020/01/11 Javascript
用VsCode编辑TypeScript的实现方法
2020/05/07 Javascript
JavaScript Window浏览器对象模型原理解析
2020/05/30 Javascript
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
Python笔记之代理模式
2019/11/20 Python
根据tensor的名字获取变量的值方式
2020/01/04 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
澳大利亚游乐场设备品牌:Lifespan Kids
2019/05/24 全球购物
司机辞职报告范文
2014/01/20 职场文书
上班上网检讨书
2014/01/29 职场文书
网络文明传播志愿者活动方案
2014/08/20 职场文书
2015年党风廉政承诺书
2015/01/22 职场文书
2015年工会工作总结
2015/03/30 职场文书
就业推荐表院系意见
2015/06/05 职场文书