python 三种单例模式
- 装饰器
# 装饰器
def singleton(cls):
instance = {}
def inner(*args, **kw):
if cls not in instance:
instance[cls] = cls(*args, **kw)
return instance[cls]
return inner
@singleton
class A:
pass
a = A()
b = A()
print(a is b)
- 元类
# 元类
class Meta(type):
def __init__(cls, *args, **kwargs):
super().__init__(*args, **kwargs)
cls.instance = None
def __call__(cls, *args, **kwargs):
if cls.instance is None:
cls.instance = super(Meta, cls).__call__(*args, **kwargs)
return cls.instance
class A(metaclass=Meta): # A 是 meta 的实例
pass
a = A() # A() 会调用 meta 的 __call__() 方法
b = A()
print(a is b)
- 构造函数
# 构造方法
class Base(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
cls._instance = super(Base, cls).__new__(cls)
return cls._instance
class A(Base):
pass
a = A()
b = A()
print(a is b)
分类:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2020-11-08 python操作xml
2020-11-08 python xpath查找元素