python单例模式改进的地方_python之单例模式实现的三种方式

什么是单例模式?通俗点讲:单例模式就是在程序执行的过程当中,类只有一个实例,这不是说单例模式只能去建立一个实例,而是你建立的全部实例(也就是对象)都指的是同一个实例。如何作到这一点呢?咱们的__new__特殊方法就派上用场了,可能你们对这个方法熟悉又陌生,那么接下来经过一个小程序简单的过渡一下小程序

class A():

def __new__(cls):

return "你好"

def __init__(self):

print(self)

print(A())

猜测一下,这里控制台会输出什么?学习

输出结果:你好

这里再建立A对象的时候就会先执行__new__方法,而后将返回值传递给__init__方法的self,因此结果会是:你好,这这段程序中咱们知道对象的建立是依靠__new__方法的,那么咱们就能够经过这个方法入手,每次建立对象的时候在__new__方法内部进行判断,不拐弯抹角了,直接附上为小伙伴们准备的代码。code

class A():

_instance = None

def __new__(cls):

if cls._instance is None:

cls._instance = super().__new__(cls)

return cls._instance

def __init__(self):

print(self)

A() #输出结果:<__main__.a object at>

A() #输出结果:<__main__.a object at>

此外还有两种实现单例的方式,我呢也给你们列出来,方便你们学习和参考:对象

# 方式一

def Single(cls,*args,**kwargs):

instances = {}

def get_instance (*args, **kwargs):

if cls not in instances:

instances[cls] = cls(*args, **kwargs)

return instances[cls]

return get_instance

@Single

class B:

pass

# 方式二

class Single:

def __init__(self):

print("单例模式实现方式二。。。")

single = Single()

del Single # 每次调用single就能够了

经过测验,能够清晰对比到两个对象地址是同样的,可见咱们的目的就达到了,上面三种实现方式

在使用中也略有不一样,你们能够根据须要使用。

谢谢你们的支持!get

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值