python设计模式——单例模式

单例模式(Singleton Pattern)即一个类只能拥有一个实例对象,实例化多次的结果都会指向同一个对象。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

特点:全局唯一,允许更改

优点:

  • 避免对资源的多重占用,如写入文件操作
  • 节省内存
  • 防止命名空间被污染

缺点:

  • 没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化
通过继承方式实现单例模式:
# 继承实现

class Singleton:
    def __new__(cls,*args,**kwargs):

        if not hasattr(cls, 'ins'):
            singletonInsObject = super().__new__(cls,*args,**kwargs)
            setattr(cls, 'ins', singletonInsObject)
        return getattr(cls, 'ins')


class Category(Singleton):
    pass

if __name__ == '__main__':
    i= Category()
    print(id(i))

    c= Category()
    print(id(c))
	

# 2234442501712
# 2234442501712
通过装饰器实现单例模式
def warpper(clsObject):
    def  inner(*args , **kwargs):
        if not hasattr(clsObject, "ins"):
            singletonInsObject = clsObject(*args,**kwargs)
            setattr(clsObject, 'ins',singletonInsObject)
        return  getattr(clsObject, 'ins')
    return inner

@warpper
class Category:
    pass


if __name__ == '__main__':
    i= Category()
    print(id(i))

    c= Category()
    print(id(c))

# 1633213381360
# 1633213381360
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python单例模式相对于其他语言来说,实现起来相对简单。Python单例模式复杂度较低。在Python中,可以通过在类中使用类变量来实现单例模式。通常使用一个私有的类变量来保存实例,并提供一个公共的静态方法来获取该实例。 在引用的代码中,通过在类的内部定义一个私有的类变量`_instance`来保存实例,并在`__new__`方法中判断该变量是否为空,如果为空则创建实例并将其保存到该变量中,如果不为空,则直接返回该实例。这样,无论创建多少次该类的实例,都只会返回同一个实例。因此,复杂度相对较低。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Python单例模式](https://blog.csdn.net/edison0951/article/details/83814139)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [chatGPT教你设计模式[3] ——创建型模式(单例模式、建造者模式和原型模式)](https://blog.csdn.net/qq_35082030/article/details/128437978)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软件测试技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值