Python 单例模式:5种实现方式

本文介绍了Python中的单例模式,一种确保类只有一个实例的设计模式。文章详细讲解了通过模块、类装饰器、类绑定方法、new方法和元类五种方式实现单例,并提供了实例代码和执行结果,帮助理解每种方法的工作原理。同时,文中也提到了单例模式的优缺点和适用场景。
摘要由CSDN通过智能技术生成


单例模式

单例模式(Singleton mode):一种常见的软件设计模式,该设计模式主要目的就是确保某一个类中只能有一个实例存在。

如:产生了很多实例,而它们做的事情只是执行发一个邮件的功能。这会特别浪费内存资源,因为频繁创建和销毁实例。

优点:

1、由于单例模式在内存中只有一个实例,减少内存开支,特别是一个对象需要频繁地创建销毁时,而且创建或销毁时性能又无法优化,单例模式就非常明显了
2、单例模式可以避免对资源的多重占用。单例一次只接受一个使用者,如果还要访问使用,需要等待上一个使用完。

缺点:

1、不适用于变化的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。
2、单例模式没有抽象层,扩展很困难,若要扩展,除了修改代码别无选择


模块实现单例

在了解过模块后可以得知,第一次访问模块以后,会生成将一个.pyc文件,将保存第一次访问的状态。而此后的每次访问模块都是直接加载那个.pyc文件。从这一点就可以得知,Python模块是一个纯天然的单例模式。

开始实例:

# test.py
class People:
    pass
        
people = People()

# run.py
from test import people

p1 = people

p2 = people

print(p1 is p2) # is比较的是两个对象的内存地址,如果相同,则使用的是同一个实例

执行结果

True

类装饰器实现

def Signleton(cls):
    instance = False  # 做一个标识,用于第一次返回实例

    def inner(*args, **kwargs):
        nonlocal instance

        if not instance:  # 如果为假,则创建一个实例
            instance = cls(*args, **kwargs)  # 调用People类,产生一个实例

        instance.__init__(*args, **kwargs)  # 让这个实例的属性可变化
        return instance  # 返回这个实例

    # 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值