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学习之面向对象【入门初级篇】
Jan 21 Python
详解Python读取配置文件模块ConfigParser
May 11 Python
python django 实现验证码的功能实例代码
May 18 Python
python 实现tar文件压缩解压的实例详解
Aug 20 Python
Python面向对象编程基础解析(一)
Oct 26 Python
python字典操作实例详解
Nov 16 Python
Python 3.7新功能之dataclass装饰器详解
Apr 21 Python
python SMTP实现发送带附件电子邮件
May 22 Python
python读取文件名并改名字的实例
Jan 07 Python
Python2与Python3的区别详解
Feb 09 Python
python3.7.3版本和django2.2.3版本是否可以兼容
Sep 01 Python
Python识别验证码的实现示例
Sep 30 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
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
CodeIgniter框架中_remap()使用方法2例
2014/03/10 PHP
简单谈谈php中的unicode和utf8编码
2015/06/10 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
Javascript select下拉框操作常用方法
2009/11/09 Javascript
jquery下div 的resize事件示例代码
2014/03/09 Javascript
json字符串之间的相互转换示例代码
2014/08/21 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
2015/05/09 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
JavaScript简单生成 N~M 之间随机数的方法
2017/01/13 Javascript
vue.js 上传图片实例代码
2017/06/22 Javascript
JavaScript之DOM_动力节点Java学院整理
2017/07/03 Javascript
解决vuejs项目里css引用背景图片不能显示的问题
2018/09/13 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
JS自定义滚动条效果
2020/03/13 Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
2020/05/31 Javascript
vue自定义组件实现双向绑定
2021/01/13 Vue.js
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
使用Python中的tkinter模块作图的方法
2017/02/07 Python
对python pandas读取剪贴板内容的方法详解
2019/01/24 Python
浅谈Django中view对数据库的调用方法
2019/07/18 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
Python While循环语句实例演示及原理解析
2020/01/03 Python
Python如何读写CSV文件
2020/08/13 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
仿CSDN Blog返回页面顶部功能实现原理及代码
2013/06/30 HTML / CSS
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
Lands’ End英国官方网站:高质量男女服装
2017/10/07 全球购物
个人廉洁自律承诺书
2014/03/27 职场文书
忠诚与背叛观后感
2015/06/04 职场文书
2016感恩母亲节校园广播稿
2015/12/17 职场文书
JavaScript原始值与包装对象的详细介绍
2021/05/11 Javascript
利用Python判断你的密码难度等级
2021/06/02 Python
SQL Server2019安装的详细步骤实战记录(亲测可用)
2022/06/10 SQL Server