用python写一个单例模式
时间: 2023-07-04 09:06:56 浏览: 108
详解python实现线程安全的单例模式
单例模式是一种常见的设计模式,它确保一个类只有一个实例,并提供了全局访问点。
在 Python 中,可以通过使用装饰器或元类来实现单例模式。下面是使用装饰器实现的代码示例:
```python
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 MySingletonClass:
def __init__(self, arg1, arg2):
self.arg1 = arg1
self.arg2 = arg2
def some_method(self):
print(f"arg1={self.arg1}, arg2={self.arg2}")
# 创建单例对象
obj1 = MySingletonClass("foo", "bar")
obj2 = MySingletonClass("hello", "world")
# obj1 和 obj2 是同一个对象
print(obj1 is obj2) # True
obj1.some_method() # 输出:arg1=foo, arg2=bar
```
这里定义了一个 `singleton` 装饰器,它接收一个类作为参数,并返回一个闭包函数 `get_instance`。当我们使用 `@singleton` 装饰一个类时,实际上是将这个类作为参数传递给 `singleton` 函数,然后将返回的 `get_instance` 函数绑定到这个类上。
在 `get_instance` 函数中,使用一个字典 `instances` 来保存已经创建的类实例。如果当前类还没有被实例化,则调用类的构造函数 `cls(*args, **kwargs)` 创建一个新的实例,并将其保存到 `instances` 字典中。最后返回这个实例。
这样,多次创建同一个类的实例时,实际上只会创建一次,而后续的调用都会返回同一个实例对象,从而实现了单例模式。
阅读全文