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 pass 语句使用示例
Mar 11 Python
python生成随机mac地址的方法
Mar 16 Python
Python中的字符串替换操作示例
Jun 27 Python
Python实现简单过滤文本段的方法
May 24 Python
Python安装Numpy和matplotlib的方法(推荐)
Nov 02 Python
python编程使用selenium模拟登陆淘宝实例代码
Jan 25 Python
python日期相关操作实例小结
Jun 24 Python
对python 中class与变量的使用方法详解
Jun 26 Python
使用 Python 写一个简易的抽奖程序
Dec 08 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
Dec 10 Python
python爬虫工具例举说明
Nov 30 Python
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
Apr 11 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中call_user_func_array()函数的用法演示
2012/02/05 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
基础的WordPress插件制作教程
2015/11/24 PHP
PHP实现根据数组某个键值大小进行排序的方法
2018/03/13 PHP
PHP实现微信红包金额拆分试玩的算法示例
2018/04/07 PHP
[IE&FireFox兼容]JS对select操作
2007/01/07 Javascript
解决表单中第一个非隐藏的元素获得焦点的一个方案
2009/10/26 Javascript
JavaScript DOM 学习第七章 表单的扩展
2010/02/19 Javascript
javascript变量作用域使用中常见错误总结
2013/03/26 Javascript
常用js字符串判断方法整理
2013/10/18 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
jQuery实现鼠标点击处心形漂浮的炫酷效果示例
2018/04/12 jQuery
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
2018/11/09 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
2018/12/24 Javascript
[02:33]DOTA2亚洲邀请赛趣味视频之吐真话筒
2018/03/31 DOTA
Python实现的基于优先等级分配糖果问题算法示例
2018/04/25 Python
python 产生token及token验证的方法
2018/12/26 Python
Django和Flask框架优缺点对比
2019/10/24 Python
Python自动化完成tb喵币任务的操作方法
2019/10/30 Python
Python类继承和多态原理解析
2020/02/05 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
keras 自定义loss model.add_loss的使用详解
2020/06/22 Python
SmartBuyGlasses台湾:名牌眼镜,名牌太阳眼镜及隐形眼镜
2017/01/04 全球购物
PHP引擎php.ini参数优化深入讲解
2021/03/24 PHP
英语专业毕业生自我鉴定
2013/11/09 职场文书
聚美优品陈欧广告词
2014/03/14 职场文书
大学毕业寄语大全
2014/04/10 职场文书
医药销售自我评价200字
2014/09/11 职场文书
2014年党员个人工作总结
2014/12/02 职场文书
护士实习自荐信
2015/03/06 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书
基于angular实现树形二级表格
2021/10/16 Javascript
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电
html,css,javascript是怎样变成页面的
2023/05/07 HTML / CSS