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)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~