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 正则表达式操作指南
May 04 Python
Python制作CSDN免积分下载器
Mar 10 Python
用Python的Django框架完成视频处理任务的教程
Apr 02 Python
python中的错误处理
Apr 10 Python
说一说Python logging
Apr 15 Python
Python入门_学会创建并调用函数的方法
May 16 Python
Sanic框架基于类的视图用法示例
Jul 18 Python
django 实现电子支付功能的示例代码
Jul 25 Python
python无限生成不重复(字母,数字,字符)组合的方法
Dec 04 Python
Flask框架模板继承实现方法分析
Jul 31 Python
基于python实现判断字符串是否数字算法
Jul 10 Python
python collections模块的使用
Oct 16 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&mysql(一)
2006/10/09 PHP
php数组去重复数据示例
2014/02/25 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
2014/07/12 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
Laravel使用支付宝进行支付的示例代码
2017/08/16 PHP
PHP校验15位和18位身份证号的类封装
2018/11/07 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
2019/02/28 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
FCK调用方法..
2006/12/21 Javascript
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
如何防止回车(enter)键提交表单
2014/05/11 Javascript
本人自用的global.js库源码分享
2015/02/28 Javascript
再谈JavaScript异步编程
2016/01/27 Javascript
Javascript基础学习笔记(菜鸟必看篇)
2016/07/22 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
AngularJS实现的输入框字数限制提醒功能示例
2017/10/26 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
2017/12/18 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
Vue中util的工具函数实例详解
2019/07/08 Javascript
Python中time模块和datetime模块的用法示例
2016/02/28 Python
python 默认参数问题的陷阱
2016/02/29 Python
Python的CGIHTTPServer交互实现详解
2018/02/08 Python
Python入门之后再看点什么好?
2018/03/05 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
Python实现爬虫从网络上下载文档的实例代码
2018/06/13 Python
浅谈python标准库--functools.partial
2019/03/13 Python
Css3圆角边框制作代码
2015/11/18 HTML / CSS
html5记忆翻牌游戏实现思路及代码
2013/07/25 HTML / CSS
HTML5 新表单类型示例代码
2018/03/20 HTML / CSS
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
Michael Kors美国官网:美式奢侈生活风格的代表
2016/11/25 全球购物
经济系大学生求职信
2013/10/01 职场文书
小学生国庆节演讲稿
2014/09/05 职场文书
党员民主评议自我评价
2014/10/20 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
幼儿园安全管理制度
2015/08/05 职场文书