Python中使用 metaclass 实现Singleton 模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | class Singleton( type ): def __call__( cls , * args, * * kwargs): print "Singleton call" if not hasattr ( cls , 'instance' ): cls .instance = super (Singleton, cls ).__call__( * args, * * kwargs) return cls .instance def __new__( cls , name, bases, dct): print "Singleton new" return type .__new__( cls , name, bases, dct) def __init__( cls , name, bases, dct): print "Singleton init" super (Singleton, cls ).__init__(name, bases, dct) class Cache( object ): __metaclass__ = Singleton def __new__( cls , * args, * * kwargs): print "Cache new" return object .__new__( cls , * args, * * kwargs) def __init__( cls , * args, * * kwargs): print "Cache init" def __call__( cls , * args, * * kwargs): print "Cache call" print Cache() print Cache() |
输出:
Singleton new
Singleton init
Singleton call
Cache new
Cache init
<__main__.Cache object at 0x01CDB130>
Singleton call
<__main__.Cache object at 0x01CDB130>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?