教程集 www.jiaochengji.com
教程集 >  Python编程  >  Python入门  >  正文 Python中如何使用_new_实现单例模式

Python中如何使用_new_实现单例模式

发布时间:2021-12-14   编辑:jiaochengji.com
教程集为您提供Python中如何使用,new,实现单例模式等资源,欢迎您收藏本站,我们将为您提供最新的Python中如何使用,new,实现单例模式资源

单例模式是一个经典设计模式,简要的说,一个类的单例模式就是它只能被实例化一次,实例变量在第一次实例化时就已经固定。

在Python中常见的单例模式有None,这就是一个很典型的设计,通常使用 if xxx is None或者if xxx is not None来比较运算。

Python实现单例模式

代码如下:

<pre class="brush:php;toolbar:false">class MyClass:     _instance = None       _first_init = False       def __new__(cls, *args, **kwargs):         if not cls._instance:             cls._instance = super().__new__(cls)         return cls._instance     def __init__(self, var1, var2):         cls = type(self)         if not cls._first_init:             self.var1 = var1             self.var2 = var2             cls._first_init = True</pre>

如上所示,我创建了一个MyClass的类,定义了两个类变量,第一个是_instance,它负责保存该类创建的实例。第二个是_first_init,它是一个布尔值,保存是否为第一次实例化该类。

相关推荐:《Python视频教程》

在__new__方法中(构造函数),判断是否存在_instance这个类变量,如果之前已经实例化了,直接返回。如果是第一次实例化,就会为_instance类变量绑定实例,使用super().__new__(cls)创建实例,即调用父类object.__new__(MyClass)创建实例。

在__init__方法中(初始化函数),我们通过cls=type(self)获取MyClass类,判断是否第一次实例化。如果是第一次实例化,就绑定实例变量。否则什么都不做。

运行效果

我们创建两个实例,来对比

<pre class="brush:php;toolbar:false">>>> instance1 = MyClass(1, 2) >>> instance2 = MyClass(7, 5) >>> id(instance1) == id(instance2) True >>> instance2.var1 1</pre>

可以看到,这两个实例的内存地址都相同,而且第一次实例化后变量已经固定了,全局不会再改变。

这就是单例模式的实现。

相关推荐:

Python之类方法、__new__方法和__init__方法介绍

您可能感兴趣的文章:
Python中如何使用_new_实现单例模式
深入php设计模式实例详解
Python的特点(优点和缺点)
python常用的几种设计模式是什么
Python自定义模块
python如何编写简单网页
最全面的12种Python学习方式
python怎么用正则表达式筛选网页内容
python怎么添加模块
php单例模式为何只能实例化一次

[关闭]
~ ~