知行编程网知行编程网  2022-12-03 17:30 知行编程网 隐藏边栏  10 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python中如何使用_new_实现单例模式的相关知识,希望可以帮到处于编程学习途中的小伙伴

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

Python中常见的单例模式是None,这是一个非常典型的设计,通常使用if xxx is None或者if xxx is not None来比较操作。

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


Python实现单例模式

代码如下:

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

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

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

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


运行效果

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

>>> instance1 = MyClass(1, 2)
>>> instance2 = MyClass(7, 5)
>>> id(instance1) == id(instance2)
True
>>> instance2.var1
1

可以看出,两个实例的内存地址是一样的,第一次实例化后变量已经固定,全局不会改变。

这就是单例模式的实现。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享