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创建只读属性对象的方法(ReadOnlyObject)
Feb 10 Python
python访问类中docstring注释的实现方法
May 04 Python
python基础入门学习笔记(Python环境搭建)
Jan 13 Python
详解Python中的array数组模块相关使用
Jul 05 Python
Python列表切片操作实例总结
Feb 19 Python
Python 给屏幕打印信息加上颜色的实现方法
Apr 24 Python
解决Opencv+Python cv2.imshow闪退问题
Apr 24 Python
django template实现定义临时变量,自定义赋值、自增实例
Jul 12 Python
python计算auc的方法
Sep 09 Python
python 两种方法删除空文件夹
Sep 29 Python
Python中Schedule模块使用详解 周期任务神器
Apr 19 Python
Python测试框架pytest高阶用法全面详解
Jun 01 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/08/10 PHP
php从身份证获取性别和出生年月
2017/02/09 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
jquery 日期分离成年月日的代码
2010/05/14 Javascript
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
javascript创建数组之联合数组的使用方法示例
2013/12/26 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
2016/03/25 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
NodeJS处理Express中异步错误
2017/03/26 NodeJs
javascript按顺序加载运行js方法
2017/12/01 Javascript
React中的refs的使用教程
2018/02/13 Javascript
vue-cli 2.*中导入公共less文件的方法步骤
2018/11/22 Javascript
在Echarts图中给坐标轴加一个标识线markLine
2020/07/20 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
2020/11/11 Javascript
python实现从一组颜色中找出与给定颜色最接近颜色的方法
2015/03/19 Python
python使用mailbox打印电子邮件的方法
2015/04/30 Python
python WindowsError的错误代码详解
2017/07/23 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
2019/07/08 Python
wxPython之wx.DC绘制形状
2019/11/19 Python
pytorch:实现简单的GAN示例(MNIST数据集)
2020/01/10 Python
Python vtk读取并显示dicom文件示例
2020/01/13 Python
微软加拿大官方网站:Microsoft Canada
2019/04/28 全球购物
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
C,C++的几个面试题小集
2013/07/13 面试题
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
灵泰克Java笔试题
2016/01/09 面试题
省三好学生申请材料
2014/01/22 职场文书
公务员综合考察材料
2014/02/01 职场文书
婚礼主持词
2014/03/13 职场文书
《彭德怀和他的大黑骡子》教学反思
2014/04/12 职场文书
应届生求职自荐信范文
2015/03/04 职场文书
logback 实现给变量指定默认值
2021/08/30 Java/Android
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python
instantclient客户端 连接oracle数据库
2022/04/26 Oracle