Python下简易的单例模式详解


Posted in Python onApril 08, 2019

Python 下的单例模式

要点:

  1. 1.某个类只能有一个实例;
  2. 2.它必须自行创建这个实例;
  3. 3.它必须自行向整个系统提供这个实例

方法:重写new函数

应该考虑的情况:

  1. 1.这个单例的类可能继承了别的类
  2. 2.这个单例的类还有可能要接收参数来实例化

要点:

实例化的过程其实不是直接调用init的,首先是new分配一块空间来创建实例,再由init对这个实例进行初始化.我们无法阻止new和init的调用,我们只能是限制他们的内容,以此使他们能达到单例的目的

代码:

class people(object):
	def __new__(cls,*args,**kargs):
		return super(people,cls).__new__(cls)
	def __init__(self,name):
		self.name = name
		
	def talk(self):
		print("hello,I am %s" %self.name)
	
	
	
class student(people):
	def __new__(cls,*args,**kargs):
		if not hasattr(cls,"instance"):
			
			cls.instance = super(student,cls).__new__(cls,*args,**kargs)
		return cls.instance

a = student("Timo")
print(a)
b = student("kysa")
c = student("Luyi")
a.talk()
b.talk()
print(c)

这里的输出结果是:

<__main__.student object at 0x0000025AC48BF2E8>
hello,I am Luyi
hello,I am Luyi
<__main__.student object at 0x0000025AC48BF2E8>

可以确定的是: 确实是单例了,因为a的id和b,c的id是一致的

但是为什么:a先创建明明是Timo,可是为什么a的name变成了Luyi呢?

原因:
虽然确实是a这个实例,但是在最后c重新调用了new,返回了a的实例,再经过init,改变了a的属性,执行时name ->Luyi.

解决:
这种情况下,我们只需要设置类变量,让init在类变量的限制下,只对类进行一次有效的初始化.

代码:

class people(object):
	def __new__(cls,*args,**kargs):
		return super(people,cls).__new__(cls)
	def __init__(self,name):
		self.name = name
		
	def talk(self):
		print("hello,I am %s" %self.name)
	
	
	
class student(people):
	def __new__(cls,*args,**kargs):
		if not hasattr(cls,"instance"):
			cls.instance = super(student,cls).__new__(cls,*args,**kargs)
		return cls.instance
	def __init__(self,name):
		if not hasattr(self,"init_fir"):
			self.init_fir = True
			super(student,self).__init__(name)
a = student("Timo")
print(a)
b = student("kysa")
c = student("Luyi")
a.talk()
b.talk()
print(c)

好了,到这里就用Python实现了一个简易的单例模式.

以上所述是小编给大家介绍的Python下简易的单例模式详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
浅析Python中将单词首字母大写的capitalize()方法
May 18 Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 Python
利用Python代码实现数据可视化的5种方法详解
Mar 25 Python
Python中pillow知识点学习
Apr 30 Python
Python实现将Excel转换成xml的方法示例
Aug 25 Python
Python wxPython库使用wx.ListBox创建列表框示例
Sep 03 Python
对Python3 goto 语句的使用方法详解
Feb 16 Python
Python Django 简单分页的实现代码解析
Aug 21 Python
python上传时包含boundary时的解决方法
Apr 08 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
Apr 09 Python
matplotlib之属性组合包(cycler)的使用
Feb 24 Python
python推导式的使用方法实例
Feb 28 Python
Python字符串的常见操作实例小结
Apr 08 #Python
Python面向对象程序设计多继承和多态用法示例
Apr 08 #Python
python仿抖音表白神器
Apr 08 #Python
Python面向对象程序设计之私有属性及私有方法示例
Apr 08 #Python
分析经典Python开发工程师面试题
Apr 08 #Python
django celery redis使用具体实践
Apr 08 #Python
python制作抖音代码舞
Apr 07 #Python
You might like
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
德劲1104的电路分析与改良
2021/03/01 无线电
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
PHP isset()与empty()的使用区别详解
2010/08/29 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
php基础教程
2015/08/26 PHP
Yii数据读取与跳转参数传递用法实例分析
2016/07/12 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
javascript实现切换td中的值
2014/12/05 Javascript
javascript中的this详解
2014/12/08 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
2015/04/06 Javascript
Jquery实现简单的轮播效果(代码管用)
2016/03/14 Javascript
简述JavaScript提交表单的方式 (Using JavaScript Submit Form)
2016/03/18 Javascript
为你的微信小程序体积瘦身详解
2017/05/20 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
2017/07/12 Javascript
jQuery实现数字自动增加或者减少的动画效果示例
2018/12/11 jQuery
微信小程序背景音乐开发详解
2019/12/12 Javascript
关于Js中new操作符的作用详解
2021/02/21 Javascript
[01:38]DOTA2 2015国际邀请赛中国区预选赛 Showopen
2015/06/01 DOTA
跟老齐学Python之关于类的初步认识
2014/10/11 Python
简单的编程0基础下Python入门指引
2015/04/01 Python
Python中实现最小二乘法思路及实现代码
2018/01/04 Python
详解Django之admin组件的使用和源码剖析
2018/05/04 Python
对python3标准库httpclient的使用详解
2018/12/18 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
2019/08/09 Python
Python range、enumerate和zip函数用法详解
2019/09/11 Python
python TCP包注入方式
2020/05/05 Python
HTML5-WebSocket实现聊天室示例
2016/12/15 HTML / CSS
世界上最大的折扣香水店:FragranceNet.com
2016/10/26 全球购物
Optimalprint加拿大:在线打印服务
2020/04/03 全球购物
工商治理实习生的自我评价
2014/01/15 职场文书
环保主题班会教案
2015/08/13 职场文书
2016年国培研修日志
2015/11/13 职场文书
小学语文教师竞聘演讲稿范文
2019/08/09 职场文书