Singleton 单例模式
-
单例是一种设计模式,应用该模式的类只会生成一个实例。对外提供一个全局访问点(例如配置文件)
-
使用函数装饰器实现单例
-
使用类装饰器实现单例
-
使用 new 关键字实现单例
-
使用 metaclass 实现单例
重写 new 方法
class Singleton:
_obj = None
_init_flag = True
def __new__(cls, *args, **kwargs):
if cls._obj == None:
cls._obj = object.__new__(cls)
return cls._obj
def __init__(self, name):
if Singleton._init_flag:
print('init......')
self.name = name
Singleton._init_flag = False
a = Singleton('a')
b = Singleton('b')
print(a)
print(b)
使用装饰器实现
def singleton(cls):
_obj = {}
def inner(*args, **kwargs):
if cls not in _obj:
_obj[cls] = cls()
return _obj[cls]
return inner
@singleton
class Cls:
def __init__(self,):
print('init...')
pass
a = Cls()
b = Cls()
print(a)
print(b)
类装饰器实现
class Singleton:
def __init__(self, cls):
self.cls = cls
self.obj = {}
def __call__(self, *args, **kwargs):
if self.cls not in self.obj:
self.obj[self.cls] = self.cls()
return self.obj[self.cls]
@Singleton
class Cls:
def __init__(self):
print('init...')
a = Cls()
b = Cls()
print(a)
print(b)
本文来自博客园,作者:愺様,转载请注明原文链接:https://www.cnblogs.com/wyh0923/p/16057915.html