目录
一、类变量实现单例
class Singleton:
_instance = None # 类变量,保存唯一的实例
# __new__ 方法用于控制对象的创建过程,在此方法中检查 _instance 是否为 None,如果是,则创建并返回实例;否则,直接返回已有实例。
def __new__(self, *args, **kwargs):
if not self._instance:
self._instance = super().__new__(self)
return self._instance
# 测试
singleton1 = Singleton()
singleton2 = Singleton()
print(singleton1 is singleton2) # True,两个实例是同一个
二、装饰器实现单例
# 装饰器 singleton 会缓存类实例,并在第一次实例化时创建唯一实例,之后的调用都会返回这个实例。
def singleton(cls):
instances = {}
def wrapper(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return wrapper
@singleton
class Singleton:
def __init__(self):
pass
# 测试
singleton1 = Singleton()
singleton2 = Singleton()
print(singleton1 is singleton2) # True
三、元类(Metaclass)实现单例
class MyType(type):
def __init__(self, name, bases, attrs):
super().__init__(name, bases, attrs)
self.instance = None
def __call__(self, *args, **kwargs):
if not self.instance:
self.__init__(self.instance, *args, **kwargs)
return self.instance
class Singleton(object, metaclass=MyType):
pass
class Foo(Singleton):
pass
v1 = Foo()
v2 = Foo()
print(v1 == v2)

2449

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



