python单例模式实现,python单例模式连接数据库
仅用于研究参考。
目标
Python 01中的单例设计模式__new__ method单例。单案例设计模式设计模式设计模式是对前期工作的总结和提炼。通常,人们广为流传的设计模式是针对某个特定问题的成熟解决方案。设计模式用于重用代码,使其他人更容易理解,并确保代码的可靠性。单例设计模式目的3354对象由类创建,系统中只有一个实例。每次执行类名()返回的对象时,内存地址都是相同的单实例设计模式。应用场景音乐播放对象回收站对象打印机对象数据库访问对象02。__new__方法当创建一个类名为()的对象时,Python的解释器会首先调用__new__方法为对象分配空间。__new__是object基类提供的内置静态方法,主要有两个作用:在内存中为对象分配空间,返回对象的引用。Python的解释器得到对象的引用后,把引用作为第一个参数,传递给__init__方法重写__new__方法的代码非常固定!
如果重写__new__方法,则必须返回super()。__new__(cls) *否则Python的解释器不会调用对象的初始化方法。注意:__new__是一个静态方法,调用时需要主动传递cls参数。
示例代码
类MusicPlayer(对象):
def __new__(cls,*args,**kwargs):
#如果没有返回结果,
返回super()。__新__(cls)
def __init__(self):
打印(“初始化音乐播放对象”)
player=MusicPlayer()
打印(播放器)03。Python 3354中的单实例由类创建的对象在系统中只有一个实例。
定义一个class属性,初始值为None,用来记录singleton对象的引用。重写__new__方法。如果class属性为None,则调用父类方法来分配空间,并将结果记录在class属性中。返回记录在class属性中的对象引用。
类MusicPlayer(对象):
#定义类属性以记录单例对象引用
实例=无
def __new__(cls,*args,**kwargs):
# 1.确定是否已经分配了类属性。
如果cls.instance为None:
cls.instance=super()。__新__(cls)
# 2.返回类属性的单个实例引用
Return cls.instance仅执行一次初始化。每次用类名()创建对象,Python的解释器都会自动调用两个方法:_ _ new _ _ allocate space _ _ init _ _ object初始化。在前一节中修改了__new__方法之后,每次都会引用第一个创建的对象。但是,初始化方法将被再次调用。
让初始化操作只执行一次
解决方法:定义一个类属性init_flag是否已经初始化,初始值为False。在__init__方法中,判断init_flag,如果为False,则执行初始化动作,然后将init_flag设置为True。当__init__方法再次被自动调用时,初始化操作将不会用MusicPlayer(object)类再次执行:
#记录第一个创建对象的引用
实例=无
#记录初始化动作是否已经执行。
init_flag=False
def __new__(cls,*args,**kwargs):
# 1.确定类属性是否为空对象。
如果cls.instance为None:
# 2.调用父类的方法为第一个对象分配空间
cls.instance=super()。__新__(cls)
# 3.返回由class属性保存的对象引用
返回cls.instance
def __init__(self):
如果不是MusicPlayer.init_flag:
打印(“初始化音乐播放器”)
MusicPlayer.init_flag=True
#创建多个对象
player1=音乐播放器()
打印(播放器1)
播放器2=音乐播放器()
打印(播放器2)
关注微信微信官方账号,回复【数据】,Python,PHP,JAVA,web,即可获取Python,PHP,JAVA,前端等视频数据。
来自海洋的渔夫原创作品,
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。