python学习【第十篇】单例设计模式
程序员文章站
2022-04-04 15:36:45
单例设计模式 目的:让类创建对象,在系统中只有唯一的实例,让每一次创建的对象返回的内存地址都是相同的。 __new__方法 使用类名创建对象时,python解释器首先会调用__new__方法为对象分配空间 __new__方法是有object基类提供的静态方法,主要作用有两个: 为内存中的对象分配空间 ......
单例设计模式
目的:让类创建对象,在系统中只有唯一的实例,让每一次创建的对象返回的内存地址都是相同的。
__new__方法
使用类名创建对象时,python解释器首先会调用__new__方法为对象分配空间
__new__方法是有object基类提供的静态方法,主要作用有两个:
- 为内存中的对象分配空间
- 返回对象的引用,python解释器获得引用后会作为第一个参数返回给__init__方法
python中的单例:
- __new__方法只创建一次空间,返回一次引用
- __init___方法只初始化一次
所以,在python中实现单例需要重写__new__方法,python中重写__new__方法非常固定,必须要返回return super().__new__(cls),否则解释器就得不到对象的引用就不会调用初始化方法,如图:
python中单例的实现方式:
- 定义一个 类属性,初始值是
None
,用于记录 单例对象的引用 - 重写__new__方法
- 如果 类属性
is None
,调用父类方法分配空间,并在类属性中记录结果 - 返回 类属性 中记录的 对象引用
- 让初始化工作只执行一次
示例代码如下:
class Single(object): instance = None init_flag = False def __new__(cls, *args, **kwargs): if cls.instance is None: cls.instance = super().__new__(cls) return cls.instance def __init__(self): if not Single.init_flag: print("初始化对象") Single.init_flag = True s1 = Single() s2 = Single() print(s1) print(s2)
执行结果:
初始化对象 <__main__.Single object at 0x7f4d032f1d68> <__main__.Single object at 0x7f4d032f1d68>
上一篇: 费鲁吉欧・兰博基尼在中国发布智能手机
下一篇: JS的面向对象一(通过构造函数的方式)