单例模式(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单例模式是什么意思相关推荐

  1. python创建单例模式_Python单例模式的四种创建方式实例解析

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  2. python最简单单例模式_Python单例模式的4种实现方法 | 学步园

    Python单例模式的4种实现方法: 方法1: 实现__new__方法,并将一个类的实例绑定到类变量_instance上.如果cls._instace为None,说明该类还未实例化过,实例化该类,并返 ...

  3. python编程入门单例_Python单例模式实例详解

    本文实例讲述了Python单例模式.分享给大家供大家参考,具体如下: 单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点. 实现某个类只有一个实例的途径: 1,让一个全局变量使得一个对象被 ...

  4. 用python实现单例模式_Python单例模式的两种实现方式

    单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. 比如,某 ...

  5. python中的单例模式_Python单例模式

    Singleton(单例) -- 对象创建型模式 在GoF的<设计模式:可复用面向对象软件的基础>如下定义: 意图 保证一个类仅有一个实例,并且提供一个访问它的全局访问点. 适用性 在下面 ...

  6. python 模块 多线程 单例_python的单例模式

    一.单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用 ...

  7. python单例_python 单例模式

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  8. [Python设计模式] 第21章 计划生育——单例模式

    github地址:https://github.com/cheesezh/python_design_patterns 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式 ...

  9. python面相对象编程指南_Python面向对象编程指南

    抽象是隐藏多余细节的艺术.在面向对象的概念中,抽象的直接表现形式通常为类.虽然Python是解释性语言,但是它是面向对象的,从设计之初就已经是一门面向对象的语言.Python基本上提供了面向对象编程语 ...

最新文章

  1. 7000p可以加装固态吗_解惑丨地暖不热加装循环泵可以吗?
  2. Audio-based snore detection using deep neural networks解读
  3. HTML+CSS+JS实现 ❤️六边形圆柱弹性动画特效❤️
  4. .NET Core 3 WPF MVVM框架 Prism系列之事件聚合器
  5. 用有穷状态自动机描述计算机网络的传输层协议,计算机网络基椽—第八章(传输层)(全).ppt...
  6. 以计算机基础知识做二十张ppt,计算机基础知识教程.ppt
  7. 「微信小程序」有哪些冲击与机会?
  8. 阿里云服务器ECS基本操作指南
  9. Linux命令总结大全,包含所有linux命令
  10. Facebook创始人简介
  11. 仿真树叶飘落效果的实现(精灵旋转…
  12. Beijing's Antitrust Blunder
  13. Android App赞赏功能,微信公众号赞赏功能升级:作者可直接收到赞赏, iOS安卓均可用...
  14. 计算机关机界面卡住,电脑关机时卡在关机界面的解决方法
  15. 滴滴拉屎之后是什么?
  16. 五步移相法matlab程序_用MATLAB软件对逆变电路移相调压进行仿真,30°,60°,90°的波形,并用分段分析法分析其原理_学小易找答案...
  17. IDEA代理配置(插件无法下载)
  18. goahead(嵌入式) webservice (3.3.0)运行goforms
  19. soi cmos技术及其应用_航空制造业的激光焊接技术及其应用
  20. View onMeasure 方法

热门文章

  1. Java面试题:TCP三次握手如果失败会发生什么?
  2. “华为杯”研究生数学建模竞赛2006年-【华为杯】C题:维修线性流量阀时的内筒设计问题(附获奖论文及matlab代码)
  3. 钱越存越少,合理吗?
  4. android jmdns,Android异常:’java.lang.NoClassDefFoundError:javax.jmdns.JmDNS’
  5. expected scalar type float but found half
  6. 做生意,要这样才行,呵呵
  7. android盒子 avchd,[讨论] 质疑 [国内最全面的蓝光BD、BD-9、AVCHD影片横向评测]!!!!!!!!!...
  8. iterator_traits
  9. 工作的时候也要了解这几个职场规则
  10. 基于Astar算法的二维栅格地图路径规划和避障MATLAB仿真