13.单例模式,魔术方法
一.单例模式
1.1概念
含义:是一种常用的软件设计模式,模式的目的是确保某一个类只有一个实例存在。
优点:节省内存空间 缺点;多线程访问的时候容易引发线程安全问题
列如只能打开一个游戏界面
1.2实现方式
- 通过@classmethod
- 通过装饰器实现
- 重写__new__()实现 (重点)
- 通过导入模块实现
例子:
class test(object):
pass
t1 = test()
print(t1) #<__main__.test object at 0x0000025B0B61CDF0>
t2 = test()
print(t2) #<__main__.test object at 0x0000025B0B5BDAC0>
内存地址不一样,说明对象不一样
而实现单例模式只能存在一个对象,对象的内存地址得一样
1.3 重写__new__()实现单例模式
流程
- 定义一个类属性,类属性初始值为None,用来记录单例对象的引用
- 重写__new__()
- 判断,如果类属性是none,把__new__()返回的对象保存进去
- 返回类属性中记录对象引用
class single(object):
#记录一个被创建的对象引用
obj = none #类属性
def __new__(cls):
print("这是new方法")
#判断类属性是否为空
if cla.obj == none:
cla.obj = super().__new__(cls)
return cla.obj
def __init__(self):
print("我是init")
s1=single()
print("s",s1)
s2=single()
print("s2",s2)
二.魔术方法
浙公网安备 33010602011771号