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

使用Python实现单例模式

时间:2023-03-10 12:12:05浏览次数:34  
标签:__ instance Python 模式 对象 引用 单例 new cls

在使用 类名() 创建对象时,python解释器首先会调用 __new__() 方法为对象分配内存,然后再调用 __init__() 方法进行初始化:

 

其中 __new__() 是object基类提供的内置静态方法,主要的作用是在内存中为对象分配空间,然后返回对象引用;

python解释器获得对象引用后,将引用作为第一个参数,传递给__init__方法;

而重写 __new__() 方法的代码非常固定:

  一定要有  return super().__new__(cls)  语句,否则python解释器得不到分配了空间的对象的引用,就不会调用对象的初始化方法

  因为 __new__() 是一个静态方法,从而在调用时,需要主动传递 cls 参数

 

从而,实现单例模式的代码应该如下:

 1 class Sun():
 2 
 3     #用于存储第一个被创建的引用
 4     instance = None
 5 
 6     def __new__(cls, *args, **kwargs):
 7 
 8         #判断类属性是否是空对象
 9         if cls.instance is None:
10             #调用父类方法,为第一个对象分配存储空间
11             cls.instance = super().__new__(cls)
12 
13         #返回类属性保存的对象引用
14         return cls.instance

 

测试代码:

 

 运行结果为:

 

标签:__,instance,Python,模式,对象,引用,单例,new,cls
From: https://www.cnblogs.com/wangjiong/p/17202953.html

相关文章

  • Python中的十进制、八进制与十六进制
    在计算机中,通常使用十六进制表示内存地址:在python中使用print输出对象变量,默认情况下,能够输出这个变量引用的对象是由哪一个类创建的对象,以及内存中的地址(使用的十六进制)......
  • 好客租房66-render-props模式-2使用模式
    使用步骤创建Mouse组件,在组件中提供复用状态逻辑代码(1:状态2操作状态的方法)2将要复用的状态作为props.render(state)方法的参数暴露到组件外部//导入reactimportRea......
  • 30天帮你一步步学会Python的开源项目
    最近发现一个不错的免费开源学习项目:30天学会Python如果您最近有学习Python的打算,不妨看看这个是否适合你?项目地址:https://github.com/Asabeneh/30-Days-Of-Python博客......
  • Python中的比较
    在python中使用比较时,会使用到"=="和身份运算符 身份运算符:运算符描述实例isis是判断两个标识符是不是引用的同一个对象xisy等价于id(x)==id(y)......
  • 基于敏捷模式下的测试改进分析
    一、首先是要改进新功能测试的策略一般来说,每次短期的迭代都有新的功能加入产品中,因此,针对新功能的测试方法,在短期迭代周期中需要改进。不需要编写测试用例,直接基......
  • python pandas DataFrame, Series 为空的情况
      #!/usr/bin/evnpythonimportnumpyasnpimportpandasaspddf_empty=pd.DataFrame({"empty_index":[]})print("df_empty:",df_empty)ifdf_empty.em......
  • 只需几步小白也能写出python爬虫代码
    关于爬虫怎么写,我们应该从最简单的商品的批量爬取说起,下面就是我写的一个简单的Python代码,看如何爬取并并存储到MySQL数据库中。首先,需要安装必要的第三方库,如:requests,Bea......
  • python工具jupyternotebook页面打开空白问题解决方法
    jupyternotebook页面打开空白问题解决方法下载anaconda自带的jupyternotebook找到这个配置文件C:\Users\Administrator.jupyter\jupyter_notebook_config.py打开找......
  • python os模块使用(遍历指定目录)
    pythonos模块使用(文件遍历)需求如下遍历指定目录,完成以下操作1:判断该目录下所有的文件的名称及大小,文件大小以用户选择的方式显示(KB,MB,B)list_file()oslistdirfile......
  • Python基础【16】import module的4种方式
    1.importas::先将module导入,再重新命名,然后调用module里面的方法.importmodule1asmod2.from import::直接把module的内部函数导入当前的module:from module1 ......