用python实现一个单例模式
时间: 2024-11-21 16:29:49 浏览: 6
详解python实现线程安全的单例模式
在Python中,可以使用`__new__`特殊方法和`singleton`装饰器来实现单例模式。下面是一个简单的示例:
```python
import threading
class Singleton(object):
_instance_lock = threading.Lock()
def __new__(cls, *args, **kwargs):
if not hasattr(Singleton, "_instance"):
with Singleton._instance_lock:
if not hasattr(Singleton, "_instance"):
Singleton._instance = super().__new__(cls)
return Singleton._instance
# 使用装饰器实现
def singleton(cls):
instances = {}
def get_instance(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return get_instance
@singleton
class MyClass:
pass
# 测试
print(MyClass() is MyClass()) # 输出True,证明是单例模式
```
在这个例子中,无论何时创建`MyClass`的实例,都会返回同一个已存在的实例。`__new__`方法负责检查是否有实例存在,如果没有则创建,如果有则直接返回。装饰器版本更为简洁,但它实际上也做了类似的工作。
阅读全文