Python中使用_new_实现单例模式的方法
小编给大家分享一下Python中使用_new_实现单例模式的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!
单例模式是一个经典设计模式,简要的说,一个类的单例模式就是它只能被实例化一次,实例变量在第一次实例化时就已经固定。
在Python中常见的单例模式有None,这就是一个很典型的设计,通常使用 if xxx is None或者if xxx is not None来比较运算。
Python实现单例模式
代码如下:
classMyClass:_instance=None_first_init=Falsedef__new__(cls,*args,**kwargs):ifnotcls._instance:cls._instance=super().__new__(cls)returncls._instancedef__init__(self,var1,var2):cls=type(self)ifnotcls._first_init:self.var1=var1self.var2=var2cls._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.var11
可以看到,这两个实例的内存地址都相同,而且第一次实例化后变量已经固定了,全局不会再改变。
这就是单例模式的实现。
看完了这篇文章,相信你对Python中使用_new_实现单例模式的方法有了一定的了解,想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。