Python技术博客
Python如何实现单例模式
单例模式是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例,而且该实例可以全局访问。单例模式是一种比较简单的设计模式,但是它也有一些缺点,比如没有抽象层,耦合度比较高,使用不当会导致一些问题,如资源耗费过多等。
这里我们使用Python来实现单例模式,先看一个简单的实现方式:
```python class Singleton: def init(self): pass
@classmethod def getInstance(cls): if not hasattr(Singleton, "_instance"): Singleton._instance = Singleton() return Singleton._instance if name == "main": s1 = Singleton.getInstance() s2 = Singleton.getInstance() print(s1, s2) 输出:<main.Singleton object at 0x000002C13C8CD898 <main.Singleton object at 0x000002C13C8CD898 可以看到id是相同的,说明是同一个对象 ``` 上面的实现方式也是最常见的实现方式,可以看到我们使用了 @classmethod 方法,这是因为我们要获取的是类的实例,而不是对象的实例。 我们使用了一个 _instance 的类属性来保存类的实例,使用 hasattr 方法来判断是否存在该属性,如果不存在则创建,否则直接返回。 这种方式实现了单例模式的要求,但是它也有一些缺点,比如无法实现多线程的单例模式,因为在多线程环境下,可能会有多个线程同时执行到 if not hasattr(Singleton, "_instance"): 这行代码,导致实例创建多次。 下面我们来看一个支持多线程的单例模式的实 顺便介绍一下我的另一篇专栏, 《100天精通Python - 快速入门到黑科技》专栏,是由 CSDN 内容合伙人丨全站排名 Top 4 的硬核博主 不吃西红柿 倾力打造。 基础知识篇以理论知识为主,旨在帮助没有语言基础的小伙伴,学习我整理成体系的精华知识,快速入门构建起知识框架;黑科技应用篇以实战为主,包括办公效率小工具、爬虫、数据分析、机器学习、计算机视觉、自然语言处理、数据可视化等等,让你会用一段简单的Python程序,自动化解决工作和生活中的问题,甚至成为红客。 🍅 订阅福利:原价299,限时1折订阅专栏进入千人全栈VIP答疑群,作者优先解答机会(代码指导/学习方法指引),群里大佬可以抱团取暖(大厂/外企内推机会) 🍅 订阅福利:简历指导、招聘内推、80G全栈学习视频、300本IT电子书:Python、Java、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等 🍅 专栏地址: 点击《100天精通Python - 快速入门到黑科技》