首页 > 编程语言 >Python实现单例模式

Python实现单例模式

时间:2023-02-18 21:31:33浏览次数:43  
标签:__ Singleton Python 模式 instance 单例 def cls

Python实现单例模式有两种方法:一种是通过静态变量方法实现单例模式;另一种是通过装饰器实现单例模式。具体实现代码如下:

#方法一:静态变量方法实现单例模式。
#1.构造方法私有类(确保外部类不可以通过new关键字创建对象)
#2。静态类类型的私有成员变量(私有化是保证不能被外部类访问,静态类型是确保实例化类后的唯一性)
#3. 公有的静态访问方法(向整个系统提供访问该实例的方法)
#通过以上几点来保证实例的唯一性
class Singleton(object):
    instance=None
    def __new__(cls,*args,**kwargs):
        if not cls.instance:
            cls.instance=object.__new__(cls)
        return cls.instance
    def __init__(self):
        pass
a=Singleton()
b=Singleton()
print(id(a)==id(b))
#方法二:装饰器实现单例模式。通过将不可变的类地址存放在dict中,值为那个唯一的实例,来保证实例的唯一性。
def Singleton(cls):
    instance={}
    def inner(*args,**kwargs):
        if cls not in instance:
            instance[cls]=cls()
        return instance[cls]
    return inner
@Singleton
class A(object):
    pass
cls1=A()
cls2=A()
print(cls1 is cls2)           

标签:__,Singleton,Python,模式,instance,单例,def,cls
From: https://blog.51cto.com/u_15944471/6065536

相关文章

  • Python学习之线性数据结构(二)
    print(end='')end=表示语句结束后加入的东西print(sep='')sep表示间隔符1223这个间隔的空格就是间隔符print(1,2,sep='',end='')#打印数字1和2间隔符为空格......
  • 关于python中将字典的所有key组成一个列表的方式
    关于python的字典,我们可以通过MyDict.keys()得到这个字典的所有的key,然后还能通过for循环进行遍历但是细心一点、我们可以发现,MyDict.keys()其实是一个<class'dict_ke......
  • Python 学习01 基础知识
    ......
  • 微软出品自动化神器【Playwright+Java】系列(九)多线程、重定向、弹出新窗口、截图、新
    写在前面关于Playwright系列的文章,真的很久没有写了,今天一个不小心官方API部分过完了,下面将为大家逐一演示,感兴趣的同学可以自行动手练习。API部分多线程直白点说就是......
  • 用python绘制1960年到2019年全国GDP增长图
    frompyecharts.chartsimportBar,Timelinefrompyecharts.optionsimport*#处理数据f=open("D:/1960-2019全球GDP数据.csv","r",encoding="GB2312")#读取每一行,返回是......
  • Windows下面查看python安装路径的快捷方法
    在Windows(Win10-Win11)下面,查看python的安装路径,比较快捷的方法是:打开CMD窗口,运行wherepython便可以查看python安装路径,不同机器不一样:C:\Users\WinUser01\AppData\Loca......
  • python获取子线程结果
    fromthreadingimportThreadclassMyThread(Thread):def__init__(self,func,args=()):Thread.__init__(self)self.func=funcs......
  • python Django基础
    django官网https://www.djangoproject.com/download/文档https://docs.djangoproject.com/安装Django安装官网LTS版本pipinstalldjango==3.2.15Django命令>django......
  • python面向对象
    1、面向对象和面向过程的区别1.1、面向过程:是一种以事件为中心的编程思想,更关注过程。简单的问题可以用面向过程的思路来解决,直接有效,但是当问题的规模变得更大时,用面向过程......
  • Python配置文件管理之ini和yaml文件读取
    1.引言当我们设计软件时,我们通常会花费大量精力来编写高质量的代码。但这往往还不够,一个好的软件还应该考虑其整个系统,如测试、部署、网络等。其中最重要的一个方面是配置......