愺様愺様

Singleton 单例模式

愺様·2022-03-26 10:35·25 次阅读

Singleton 单例模式

  • 单例是一种设计模式,应用该模式的类只会生成一个实例。对外提供一个全局访问点(例如配置文件)

  • 使用函数装饰器实现单例

  • 使用类装饰器实现单例

  • 使用 new 关键字实现单例

  • 使用 metaclass 实现单例

重写 new 方法
Copy
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)
使用装饰器实现
Copy
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)
类装饰器实现
Copy
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)
posted @   愺様  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
点击右上角即可分享
微信分享提示