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服务器端收发请求的实现代码
Sep 29 Python
python每隔N秒运行指定函数的方法
Mar 16 Python
一步步教你用Python实现2048小游戏
Jan 19 Python
Python实现的计数排序算法示例
Nov 29 Python
python计算两个地址之间的距离方法
Jun 09 Python
Python实现的统计文章单词次数功能示例
Jul 08 Python
python图形开发GUI库wxpython使用方法详解
Feb 14 Python
Python argparse模块使用方法解析
Feb 20 Python
python新式类和经典类的区别实例分析
Mar 23 Python
Python Process创建进程的2种方法详解
Jan 25 Python
python Protobuf定义消息类型知识点讲解
Mar 02 Python
Python 流媒体播放器的实现(基于VLC)
Apr 28 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学习 字符串课件
2008/06/15 PHP
PHP快速生成各种信息提示框的方法
2016/02/03 PHP
用 JavaScript 迁移目录
2006/12/18 Javascript
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
Jquery实战_读书笔记2 选择器
2010/01/22 Javascript
javascript同页面多次调用弹出层具体实例代码
2013/08/16 Javascript
Jquery读取URL参数小例子
2013/08/30 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
jQuery中closest()函数用法实例
2015/01/07 Javascript
angularJS结合canvas画图例子
2015/02/09 Javascript
javascript实现对表格元素进行排序操作
2015/11/18 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
几行js代码实现自适应
2017/02/24 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
Bootstrap实现下拉菜单多级联动
2017/11/23 Javascript
nodejs前端模板引擎swig入门详解
2018/05/15 NodeJs
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
vuex存值与取值的实例
2019/11/06 Javascript
javascript的delete运算符知识点总结
2019/11/19 Javascript
javascript实现简易数码时钟
2020/03/30 Javascript
[47:55]Ti4第二日主赛事败者组 NaVi vs EG 1
2014/07/20 DOTA
python字符串替换的2种方法
2014/11/30 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
python实现对excel进行数据剔除操作实例
2017/12/07 Python
Python装饰器用法实例总结
2018/02/07 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
2020/02/20 Python
东方电视购物:东方CJ
2016/10/12 全球购物
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
在weblogic中发布ejb需涉及到哪些配置文件
2012/01/17 面试题
2014年国庆节演讲稿精选范文1500字
2014/09/25 职场文书
中学生综合素质自我评价
2015/03/06 职场文书
放假通知
2015/04/14 职场文书
MySQL库表名大小写的选择
2021/06/05 MySQL