python为什么会有单例模式_python单例模式是什么意思
单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。
单例模式
a、单例模式分为四种:文件,类,基于__new__方法实现单例模式,基于metaclass方式实现。
b、类实现如下:class Sigletion(objects):
import time
def __init__(self):
time.sleep(1)
@classmethod
def instance(cls,*args,**kwargs)
if not hasattr(Sigletion,'_instance'):
Sigletion._instance=Sigletion(*args,**kwargs)
return Sigletion._instance
import threading
daf task(arg):
obj=Sigletion.instance()
print(obj)
for i in range(10):
t=threading.Thread(target=task,args=[i,])
t.start()
c、基于__new__方法实现单例模式import time
import threading
class Singleton(object):
_instance_lock=threading.Lock()
def __init__(self):
pass
def __new__(cls, *args, **kwargs):
if not hasattr(Singleton,"_instance"):
with Singleton._instance_lock:
if not hasattr(Singleton,"_instance"):
Singleton._instance=object.__new__(cls,*args,**kwargs)
return Singleton._instance
obj1=Singleton()
obj2=Singleton()
print(obj1,obj2)
def task(arg):
obj = Singleton()
print(obj)
for i in range(10):
t = threading.Thread(target=task,args=[i,])
t.start()
d、基于metaclass方式实现单例模式
1、对象是类创建,创建对象时候类的__init__方法自动执行,对象()执行类的 __call__ 方法。
2、类是type创建,创建类时候type的__init__方法自动执行,类() 执行type的 __call__方法(类的__new__方法,类的__init__方法)。# 第0步: 执行type的 __init__ 方法【类是type的对象】
class Foo:
def __init__(self):
pass
def __call__(self, *args, **kwargs):
pass
# 第1步: 执行type的 __call__ 方法
# 1.1 调用 Foo类(是type的对象)的 __new__方法,用于创建对象。
# 1.2 调用 Foo类(是type的对象)的 __init__方法,用于对对象初始化。
obj = Foo()
# 第2步:执行Foodef __call__ 方法
obj()
"""
import threading
class SingletonType(type):
_instace_lock=threading.Lock()
def __call__(cls, *args, **kwargs):
if not hasattr(cls, "_instance"):
with SingletonType._instace_lock:
if not hasattr(cls, "_instance"):
cls._instance = super(SingletonType,cls).__call__(*args, **kwargs)
return cls._instance
class Foo(metaclass=SingletonType):
def __init__(self,name):
self.name=name
obj1 = Foo('name')
obj2 = Foo('name')
print(obj1,obj2)
python为什么会有单例模式_python单例模式是什么意思相关推荐
- python创建单例模式_Python单例模式的四种创建方式实例解析
单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...
- python最简单单例模式_Python单例模式的4种实现方法 | 学步园
Python单例模式的4种实现方法: 方法1: 实现__new__方法,并将一个类的实例绑定到类变量_instance上.如果cls._instace为None,说明该类还未实例化过,实例化该类,并返 ...
- python编程入门单例_Python单例模式实例详解
本文实例讲述了Python单例模式.分享给大家供大家参考,具体如下: 单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点. 实现某个类只有一个实例的途径: 1,让一个全局变量使得一个对象被 ...
- 用python实现单例模式_Python单例模式的两种实现方式
单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. 比如,某 ...
- python中的单例模式_Python单例模式
Singleton(单例) -- 对象创建型模式 在GoF的<设计模式:可复用面向对象软件的基础>如下定义: 意图 保证一个类仅有一个实例,并且提供一个访问它的全局访问点. 适用性 在下面 ...
- python 模块 多线程 单例_python的单例模式
一.单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用 ...
- python单例_python 单例模式
单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...
- [Python设计模式] 第21章 计划生育——单例模式
github地址:https://github.com/cheesezh/python_design_patterns 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式 ...
- python面相对象编程指南_Python面向对象编程指南
抽象是隐藏多余细节的艺术.在面向对象的概念中,抽象的直接表现形式通常为类.虽然Python是解释性语言,但是它是面向对象的,从设计之初就已经是一门面向对象的语言.Python基本上提供了面向对象编程语 ...
最新文章
- 7000p可以加装固态吗_解惑丨地暖不热加装循环泵可以吗?
- Audio-based snore detection using deep neural networks解读
- HTML+CSS+JS实现 ❤️六边形圆柱弹性动画特效❤️
- .NET Core 3 WPF MVVM框架 Prism系列之事件聚合器
- 用有穷状态自动机描述计算机网络的传输层协议,计算机网络基椽—第八章(传输层)(全).ppt...
- 以计算机基础知识做二十张ppt,计算机基础知识教程.ppt
- 「微信小程序」有哪些冲击与机会?
- 阿里云服务器ECS基本操作指南
- Linux命令总结大全,包含所有linux命令
- Facebook创始人简介
- 仿真树叶飘落效果的实现(精灵旋转…
- Beijing's Antitrust Blunder
- Android App赞赏功能,微信公众号赞赏功能升级:作者可直接收到赞赏, iOS安卓均可用...
- 计算机关机界面卡住,电脑关机时卡在关机界面的解决方法
- 滴滴拉屎之后是什么?
- 五步移相法matlab程序_用MATLAB软件对逆变电路移相调压进行仿真,30°,60°,90°的波形,并用分段分析法分析其原理_学小易找答案...
- IDEA代理配置(插件无法下载)
- goahead(嵌入式) webservice (3.3.0)运行goforms
- soi cmos技术及其应用_航空制造业的激光焊接技术及其应用
- View onMeasure 方法
热门文章
- Java面试题:TCP三次握手如果失败会发生什么?
- “华为杯”研究生数学建模竞赛2006年-【华为杯】C题:维修线性流量阀时的内筒设计问题(附获奖论文及matlab代码)
- 钱越存越少,合理吗?
- android jmdns,Android异常:’java.lang.NoClassDefFoundError:javax.jmdns.JmDNS’
- expected scalar type float but found half
- 做生意,要这样才行,呵呵
- android盒子 avchd,[讨论] 质疑 [国内最全面的蓝光BD、BD-9、AVCHD影片横向评测]!!!!!!!!!...
- iterator_traits
- 工作的时候也要了解这几个职场规则
- 基于Astar算法的二维栅格地图路径规划和避障MATLAB仿真