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 KMeans聚类问题分析
Feb 23 Python
使用pandas读取csv文件的指定列方法
Apr 21 Python
django manage.py扩展自定义命令方法
May 27 Python
python3个性签名设计实现代码
Jun 19 Python
Django中URL的参数传递的实现
Aug 04 Python
python实发邮件实例详解
Nov 11 Python
python实现一个点绕另一个点旋转后的坐标
Dec 04 Python
Python实现CNN的多通道输入实例
Jan 17 Python
在python3中实现更新界面
Feb 21 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
May 13 Python
Python爬虫代理池搭建的方法步骤
Sep 28 Python
Python编程源码报错解决方法总结经验分享
Oct 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/10/08 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
2017/08/25 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
2020/04/26 PHP
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
js中一维数组和二位数组中的几个问题示例说明
2014/07/17 Javascript
js实现不提交表单获取单选按钮值的方法
2015/08/21 Javascript
JQuery标签页效果实例详解
2015/12/24 Javascript
解析Node.js基于模块和包的代码部署方式
2016/02/16 Javascript
JS正则替换掉小括号及内容的方法
2016/11/29 Javascript
js css3实现图片拖拽效果
2017/03/04 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
Vue的Class与Style绑定的方法
2017/09/01 Javascript
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
vue中使用vue-cli接入融云实现即时通信
2019/04/19 Javascript
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
[56:42]完美世界DOTA2联赛循环赛 Matador vs Forest 第二场 11.06
2020/11/06 DOTA
python连接MySQL、MongoDB、Redis、memcache等数据库的方法
2013/11/15 Python
使用python BeautifulSoup库抓取58手机维修信息
2013/11/21 Python
Python中的exec、eval使用实例
2014/09/23 Python
对python中的argv和argc使用详解
2018/12/15 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
2019/08/21 Python
pytorch之添加BN的实现
2020/01/06 Python
Python实现UDP程序通信过程图解
2020/05/15 Python
如何在Python3中使用telnetlib模块连接网络设备
2020/09/21 Python
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
爱游人:Travelliker
2017/09/05 全球购物
IdealFit官方网站:女性蛋白质、补充剂和运动服装
2019/03/24 全球购物
初三物理教学反思
2014/01/21 职场文书
会计电算化学生个人的自我评价
2014/02/08 职场文书
预备党员入党自我评价范文
2014/03/10 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
2015年医生个人工作总结
2015/04/25 职场文书
初一年级组工作总结
2015/08/12 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS
Golang获取List列表元素的四种方式
2022/04/20 Golang