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 08 Python
python多重继承实例
Oct 11 Python
零基础写python爬虫之爬虫编写全记录
Nov 06 Python
python实现根据ip地址反向查找主机名称的方法
Apr 29 Python
教你用python3根据关键词爬取百度百科的内容
Aug 18 Python
Python 读写文件和file对象的方法(推荐)
Sep 12 Python
python统计多维数组的行数和列数实例
Jun 23 Python
pytorch 共享参数的示例
Aug 17 Python
python 魔法函数实例及解析
Sep 25 Python
Python Dict找出value大于某值或key大于某值的所有项方式
Jun 05 Python
使用pyplot.matshow()函数添加绘图标题
Jun 16 Python
让你相见恨晚的十个Python骚操作
Nov 18 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
使用Apache的rewrite技术
2006/06/22 PHP
php中判断字符串是否全是中文或含有中文的实现代码
2011/09/16 PHP
修改PHP的memory_limit限制的方法分享
2012/02/21 PHP
PHP中shuffle数组值随便排序函数用法
2014/11/21 PHP
THINKPHP内容分页代码分享
2015/01/14 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
2019/05/27 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
2019/06/19 PHP
javascript四舍五入函数代码分享(保留后几位)
2013/12/10 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
DOM 事件流详解
2015/01/20 Javascript
JQuery自适应窗口大小导航菜单附源码下载
2015/09/01 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
Angular实现购物车计算示例代码
2017/02/21 Javascript
AngularJS基于factory创建自定义服务的方法详解
2017/05/25 Javascript
Nodejs实现文件上传的示例代码
2017/09/26 NodeJs
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
vscode配置vue下的es6规范自动格式化详解
2019/03/20 Javascript
vue自动化路由的实现代码
2019/09/30 Javascript
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
解决已经安装requests,却依然提示No module named requests问题
2018/05/18 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
如何安装并使用conda指令管理python环境
2019/07/10 Python
使用OpenCV实现仿射变换—缩放功能
2019/08/29 Python
基于python 等频分箱qcut问题的解决
2020/03/03 Python
苏宁红孩子母婴商城:redbaby
2017/02/12 全球购物
Coggles美国/加拿大:高级国际时装零售商
2018/10/23 全球购物
凯普林包包西班牙官网:Kipling西班牙
2019/04/12 全球购物
基层党支部公开承诺书
2014/05/29 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
2014年文明创建工作总结
2014/11/25 职场文书
现实表现证明材料
2015/06/19 职场文书
格列佛游记读书笔记
2015/06/30 职场文书
2016年十一促销广告语
2016/01/28 职场文书
爱岗敬业先进典型事迹材料(2016推荐版)
2016/02/26 职场文书
ztree+ajax实现文件树下载功能
2021/05/18 Javascript