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入门及进阶笔记 Python 内置函数小结
Aug 09 Python
python实现决策树ID3算法的示例代码
May 30 Python
pandas实现将dataframe满足某一条件的值选出
Jun 12 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
Jun 26 Python
python实现飞机大战小游戏
Nov 08 Python
对python中 math模块下 atan 和 atan2的区别详解
Jan 17 Python
python opencv 实现对图像边缘扩充
Jan 19 Python
基于keras输出中间层结果的2种实现方式
Jan 24 Python
pandas处理csv文件的方法步骤
Oct 16 Python
python中re模块知识点总结
Jan 17 Python
详解Python自动化之文件自动化处理
Jun 21 Python
浅析Python中的套接字编程
Jun 22 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
各种咖啡的英文名子是什么
2021/03/03 新手入门
合格的PHP程序员必备技能
2015/11/13 PHP
PHP经典算法集锦【经典收藏】
2016/09/14 PHP
Yii框架中jquery表单验证插件用法示例
2016/10/18 PHP
详解yii2实现分库分表的方案与思路
2017/02/03 PHP
JS实现仿雅虎首页快捷登录入口及导航模块效果
2015/09/19 Javascript
Javascript中字符串replace方法的第二个参数探究
2016/12/05 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
2017/02/10 Javascript
微信小程序 JS动态修改样式的实现代码
2017/02/10 Javascript
javascript 判断用户有没有操作页面
2017/10/17 Javascript
Vue常用的几个指令附完整案例
2018/11/06 Javascript
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
vue+element实现表格新增、编辑、删除功能
2019/05/28 Javascript
layui点击按钮页面会自动刷新的解决方案
2019/10/25 Javascript
BootstrapValidator实现表单验证功能
2019/11/08 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
Python 可爱的大小写
2008/09/06 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
TensorFLow用Saver保存和恢复变量
2018/03/10 Python
PyCharm代码整体缩进,反向缩进的方法
2018/06/25 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
2019/09/20 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
2020/11/17 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
乐天旅游台湾网站:Rakuten Travel TW
2017/06/01 全球购物
Zalando Lounge瑞士:时尚与生活方式购物俱乐部
2020/03/12 全球购物
海量信息软件测试笔试题
2015/08/08 面试题
给酒店员工的表扬信
2014/01/11 职场文书
党员党性分析材料
2014/02/17 职场文书
百货商场楼层班组长竞聘书
2014/03/31 职场文书
小学生感恩父母演讲稿
2014/08/28 职场文书
2014年发展党员工作总结
2014/11/12 职场文书
详细介绍python类及类的用法
2021/05/31 Python
MySQL实现配置主从复制项目实践
2022/03/31 MySQL