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列表操作实例
Jan 14 Python
Python中functools模块函数解析
Mar 12 Python
5款非常棒的Python工具
Jan 05 Python
使用matplotlib中scatter方法画散点图
Mar 19 Python
Python3字符串encode与decode的讲解
Apr 02 Python
Django如何防止定时任务并发浅析
May 14 Python
python进程和线程用法知识点总结
May 28 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
Jun 05 Python
pyinstaller将含有多个py文件的python程序做成exe
Apr 29 Python
win10下python3.8的PIL库安装过程
Jun 08 Python
OpenCV利用python来实现图像的直方图均衡化
Oct 21 Python
Python与C/C++的相互调用案例
Mar 04 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
phpmyadmin操作流程
2006/10/09 PHP
PHP下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
支持中文的php加密解密类代码
2011/11/27 PHP
php多层数组与对象的转换实例代码
2013/08/05 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
jQuery html()等方法介绍
2009/11/18 Javascript
判断浏览器的javascript版本的代码
2010/09/03 Javascript
用console.table()调试javascript
2014/09/04 Javascript
javascript学习笔记(七)Ajax和Http状态码
2014/10/08 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
Bootstrap导航简单实现代码
2017/03/06 Javascript
CentOS 安装NodeJS V8.0.0的方法
2017/06/15 NodeJs
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
2018/08/08 jQuery
深入理解NodeJS 多进程和集群
2018/10/17 NodeJs
Node.js 在本地生成日志文件的方法
2020/02/07 Javascript
JS sort方法基于数组对象属性值排序
2020/07/10 Javascript
node.js如何根据URL返回指定的图片详解
2020/10/21 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
python写入xml文件的方法
2015/05/08 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2017/03/11 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
2017/06/20 Python
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
Django的分页器实例(paginator)
2017/12/01 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
使用Keras实现Tensor的相乘和相加代码
2020/06/18 Python
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
新闻记者个人求职的自我评价
2013/11/28 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
亮化工程实施方案
2014/03/17 职场文书
监察局领导班子四风问题整改措施思想汇报
2014/10/05 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书
优秀大学生申请书
2019/06/24 职场文书
Mysql 文件配置解析介绍
2022/05/06 MySQL
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS