青创网站首页,广东监理建设协会网站,wordpress百宝箱软件,天猫网站左侧导航用js怎么做单例设计模式1.单例设计模式2.__new__方法3.初始动作只执行一次本系列博文来自学习《Python基础视频教程》笔记整理#xff0c;视屏教程连接地址#xff1a;http://yun.itheima.com/course/273.html1.单例设计模式
设计模式#xff1a;不同的问题使用不同的解决套路。学习设…
单例设计模式1.单例设计模式2.__new__方法3.初始动作只执行一次本系列博文来自学习《Python基础视频教程》笔记整理视屏教程连接地址http://yun.itheima.com/course/273.html1.单例设计模式
设计模式不同的问题使用不同的解决套路。学习设计模式在遇到已经有的问题时就直接使用套路解题就行了。
单例设计模式的应用场景 音乐播放器、回收站、打印机 这些对象都只有一份只有唯一的一个存在
单例设计模式目的让类创建的对象在系统中只有唯一的一个实例每次执行**类名()**返回对象内存地址是相同的。
2.__new__方法
两个下划线开头两个下划线结尾的方法内置方法是object类内置的一个 静态方法 。利用类创建对象时由__new__方法给新建的对象分配空间并将对象的引用返回给解释器。解释器进一步将这个引用返回给方法的初始化方法中的self 参数并调用初始化方法。
重写new方法–实现单例的目的
class MusicPlayer(object):# 定义一个类属性初始值为none 用于记录对象的引用# 第一次调用时赋值后来调用就直接返回第一次调用的就行instanceNonedef __new__(cls, *args, **kwargs):# 1.判断类属性是否是空对象if cls.instance is None:# 调用父类的方法为第一个对象分配空间cls.instancesuper().__new__(cls)# 返回类属性保存的对象引用return cls.instancepass
#创建多个对象
player1MusicPlayer()
player2MusicPlayer()print(player1)
print(player2)输出 main.MusicPlayer object at 0x7f130b3be470 main.MusicPlayer object at 0x7f130b3be470 3.初始动作只执行一次
在上面代码中虽然每次使用类创建对象都指向相同的引用但是初始化方法却是每次创建对象都会被调用所以能做的就是让每次自动执行的初始化方法中个初始化动作只执行一次。
class MusicPlayer(object):# 定义一个类属性初始值为none 用于记录对象的引用# 第一次调用时赋值后来调用就直接返回第一次调用的就行instanceNoneint_flagFalsedef __new__(cls, *args, **kwargs):# 1.判断类属性是否是空对象if cls.instance is None:# 调用父类的方法为第一个对象分配空间cls.instancesuper().__new__(cls)# 返回类属性保存的对象引用return cls.instancedef __init__(self):# 判断是否执行过初始化动作if MusicPlayer.int_flag :return# 没有执行过执行初始化动作 print(初始化方法执行啦)# 修改类属性标记MusicPlayer.int_flagTrue#创建多个对象
player1MusicPlayer()
player2MusicPlayer()print(player1)
print(player2)输出 初始化方法执行啦 main.MusicPlayer object at 0x7f4ea08da438 main.MusicPlayer object at 0x7f4ea08da438