Python小姿势 - ## Python技术博客

2023-04-28 16:17:37 浏览数 (2)

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"): 这行代码,导致实例创建多次。

0 人点赞