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实现远程通过网络邮件控制计算机重启或关机
Feb 22 Python
python实现log日志的示例代码
Apr 28 Python
解决Tensorflow安装成功,但在导入时报错的问题
Jun 13 Python
Python对数据进行插值和下采样的方法
Jul 03 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
Oct 16 Python
Python3爬虫全国地址信息
Jan 05 Python
Python爬取数据保存为Json格式的代码示例
Apr 09 Python
详解python中自定义超时异常的几种方法
Jul 29 Python
使用 django orm 写 exists 条件过滤实例
May 20 Python
python判断一个变量是否已经设置的方法
Aug 13 Python
python中使用asyncio实现异步IO实例分析
Feb 26 Python
python读取mnist数据集方法案例详解
Sep 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
PHP 5.3.0 安装分析心得
2009/08/07 PHP
php使浏览器直接下载pdf文件的方法
2013/11/15 PHP
PHP获取服务器端信息的方法
2014/11/28 PHP
Yii全局函数用法示例
2017/01/22 PHP
yii gridview实现时间段筛选功能
2017/08/15 PHP
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
Javascript 函数中的参数使用分析
2010/03/27 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
在HTML代码中使用JavaScript代码的例子
2014/10/16 Javascript
jquery仿百度经验滑动切换浏览效果
2015/04/14 Javascript
Node.js编程中客户端Session的使用详解
2015/06/23 Javascript
深入剖析JavaScript面向对象编程
2016/07/12 Javascript
基于jQuery实现页面搜索功能
2020/03/26 Javascript
promise处理多个相互依赖的异步请求(实例讲解)
2017/08/03 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
2019/05/22 Javascript
Smartour 让网页导览变得更简单(推荐)
2019/07/19 Javascript
js实现开关灯效果
2020/03/30 Javascript
[02:43]DOTA2英雄基础教程 半人马战行者
2014/01/13 DOTA
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
浅谈Python程序与C++程序的联合使用
2015/04/07 Python
简单谈谈python中的多进程
2016/11/06 Python
详解python 拆包可迭代数据如tuple, list
2017/12/29 Python
django利用request id便于定位及给日志加上request_id
2018/08/26 Python
python mqtt 客户端的实现代码实例
2019/09/25 Python
python matplotlib饼状图参数及用法解析
2019/11/04 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
详解python如何引用包package
2020/06/07 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
The North Face意大利官网:服装、背包和鞋子
2020/06/17 全球购物
师范大学音乐表演专业求职信
2013/10/23 职场文书
堂吉诃德读书笔记
2015/06/30 职场文书
python实战之一步一步教你绘制小猪佩奇
2021/04/22 Python
django如何自定义manage.py管理命令
2021/04/27 Python