内容:保证一个类只有一个实例,并提供一个访问它的全局访问点。
使用场景:当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
优点:
- 对唯一实例的受控访问。
- 单例相当于全局变量,但防止了命名空间被污染。
实现:
- 使用__new__方法(推荐)
- 当我们实例化一个对象时,是先执行了类的__new__方法(没写时,默认调用object.__new__),实例化对象;然后再执行类的__init__方法,对这个对象进行初始化,所以我们可以基于这个,实现单例模式。
- 思路:在一个类的__new__方法中先判断是不是存在实例,如果存在实例,就直接返回,如果不存在实例就创建。
- 实现单例是,为了保证线程安全需要在内部加入锁
-
import threading class Singleton(object): _instance_lock = threading.Lock() def __init__(self): pass def __new__(cls, *args, **kwargs): if not hasattr(Singleton, "_instance"):

本文介绍了Python中实现单例模式的多种方法,包括使用`__new__`方法、装饰器、模块导入以及元类。单例模式确保了一个类只有一个实例,并提供了全局访问点。通过这些方法,可以控制对唯一实例的访问,防止命名空间污染,同时考虑了线程安全问题。
最低0.47元/天 解锁文章
1271

被折叠的 条评论
为什么被折叠?



