Python技术博客
Python如何实现单例模式
单例模式是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例,而且该实例可以全局访问。单例模式是一种比较简单的设计模式,但是它也有一些缺点,比如没有抽象层,耦合度比较高,使用不当会导致一些问题,如资源耗费过多等。
这里我们使用Python来实现单例模式,先看一个简单的实现方式:
代码语言:javascript复制 ```python class Singleton: def init(self): pass
代码语言:javascript复制@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"): 这行代码,导致实例创建多次。