Python 基于python实现单例模式

概念

简单说,单例模式(也叫单件模式)的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个(当然也可以不存在)

例子:

一台计算机上可以连好几个打印机,但是这个计算机上的打印程序只能有一个,这里就可以通过单例模式来避免两个打印作业同时输出到打印机中,即在整个的打印过程中我只有一个打印程序的实例。

代码

import threading

class Signleton(object):

def __init__(self):

print("__init__ method called")

def __new__(cls):

print("__new__ method called")

mutex=threading.Lock()

mutex.acquire() # 上锁,防止多线程下出问题

if not hasattr(cls, 'instance'):

cls.instance = super(LogSignleton, cls).__new__(cls)

mutex.release()

return cls.instance

if __name__ == '__main__':

obj = Signleton()

输出结果:

>>> ================================ RESTART ================================

>>>

__new__ method called

__init__ method called

>>>

说明

1.从输出结果来看,最先调用 __new__ 方法,然后调用__init__方法

2. __new__ 通常用于控制生成一个新实例的过程,它是类级别的方法。

3. __init__ 通常用于初始化一个新实例,控制这个初始化的过程,比如添加一些属性,做一些额外的操作,发生在类实例被创建完以后。它是实例级别的方法。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏自译文章/自学记录

Functions在JavaScript中是作为 first class objects存在的

Functions在JavaScript中是作为 'first class objects' 存在的。这意味着JS中的functions是一种特殊类型的obje...

6020
来自专栏只喝牛奶的杀手

日志系统

上一篇说了一下《解决问题的一般套路》,里面讲到了日志系统的重要性,日志重要吗?监控重要吗?of course!日志就是要能找到用户做了什么请求那个...

11510
来自专栏自译文章/自学记录

Prototypal inheritance原型继承(实用篇)

本文侧重于如何应用prototype inheritance,想了解基本概念的可以查看基础概念篇。 在programing时,我们总是想从已有的事物中继承并扩...

7130
来自专栏开发架构二三事

springboot validation参数校验

其中在spring-boot-starter-web中有hibernate-validater的依赖。

50920
来自专栏一杯82年的JAVA

探索JAVA并发 - 同步工具类

闭锁的作用相当于一扇门,在这扇门没打开前,任何线程执行到这里都会被无情扣押,直到有人打开了这扇门,那些阻塞在门外的线程才会继续进行门后的流程。

13030
来自专栏只喝牛奶的杀手

禁用feign retryer

为什么要禁用retryer?其实主要是为了Debug,禁用feign retryer有两面性,追妹子一定要retry!!!如果接口做好幂等性,retry不影响,...

13940
来自专栏开发架构二三事

swagger 2.0对oauth2 token权限问题的解决

4. 访问http://localhost:8080/api/swagger-ui.html

88920
来自专栏奔跑的键盘侠

按键精灵——脚本日志

初入按键精灵,无非写个简单的模拟键盘鼠标操作,要写个运行日志,记录敲了哪个键盘几下,鼠标左右键各多少下吗?

55540
来自专栏Java帮帮-微信公众号-技术文章全总结

Java战争的回忆,请善待Java

本文来自微信公众号:金捷幡(ID:jin-jiefan),作者:金捷幡,封面:拉里·埃里森(东方IC)

12030
来自专栏开发架构二三事

shiro整合swagger需要注意的点

重新打开shiro,运行,swagger2页面访问正常,但是程序日志输出依然有权限访问出错

36010

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励