Python设计模式:单例设计模式
单例设计模式目的:让类创建对象,在系统中只有唯一的实例,让每一次创建的对象返回的内存地址都是相同的。
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)
移动端设备除iPad Pro外,其它移动设备仅能阅读基础的文本文字。
建议使用PC或笔记本电脑,浏览器使用Chrome或FireFox进行浏览,以开启左侧互动实验区来提升学习效率,推荐使用的分辨率为1920x1080或更高。
我们坚信最好的学习是参与其中这一理念,并致力成为中文互联网上体验更好的学练一体的IT技术学习交流平台。
您可加QQ群:575806994,一起学习交流技术,反馈网站使用中遇到问题。
内容、课程、广告等相关合作请扫描右侧二维码添加好友。
建议使用PC或笔记本电脑,浏览器使用Chrome或FireFox进行浏览,以开启左侧互动实验区来提升学习效率,推荐使用的分辨率为1920x1080或更高。
我们坚信最好的学习是参与其中这一理念,并致力成为中文互联网上体验更好的学练一体的IT技术学习交流平台。

您可加QQ群:575806994,一起学习交流技术,反馈网站使用中遇到问题。
内容、课程、广告等相关合作请扫描右侧二维码添加好友。
狐狸教程 Copyright 2021