方式一:装饰器函数
def Singleton(cls):
instance = {}
def wrapper(*args, **kargs):
if cls not in instance:
instance[cls] = cls(*args, **kargs)
return instance[cls]
return wrapper
@Singleton
class SingletonTest(object):
def __init__(self, name):
self.name = name
s1 = SingletonTest('1')
s2 = SingletonTest('2')
print(id(s1) == id(s2))
方式二:装饰器类
class Singleton(object):
def __init__(self, cls):
self.cls = cls
self.instance = {}
def __call__(self, *args, **kwargs):
if self.cls not in self.instance:
self.instance[self.cls] = self.cls
return self.instance[self.cls]
@Singleton
class SingletonTest(object):
def __init__(self, name):
self.name = name
s1 = SingletonTest('1')
s2 = SingletonTest('2')
print(id(s1) == id(s2))
方式三:__new__
class Singleton:
instance = {}
def __new__(cls, *args, **kwargs):
if cls not in cls.instance:
cls.instance[cls] = cls
return cls.instance[cls]
def __init__(self, name):
self.name = name
s1 = Singleton('1')
s2 = Singleton('2')
print(id(s1) == id(s2))
方式四:元类
class SingletonType(type):
instance = {}
def __call__(cls, *args, **kwargs):
if cls not in cls.instance:
cls.instance[cls] = super().__call__(*args, **kwargs)
return cls.instance[cls]
class Singleton(metaclass=SingletonType):
def __init__(self, name):
self.name = name
s1 = Singleton('1')
s2 = Singleton('2')
print(id(s1) == id(s2))
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~