Python中有多种实现单例模式的方式,以下是其中的几种:
- 基础单例模式
| class Singleton(object): |
| __instance = None |
| |
| def __new__(cls, *args, **kwargs): |
| if not cls.__instance: |
| cls.__instance = object.__new__(cls) |
| return cls.__instance |
- 使用装饰器实现单例模式
| def singleton(cls): |
| instances = {} |
| |
| def get_instance(*args, **kwargs): |
| if cls not in instances: |
| instances[cls] = cls(*args, **kwargs) |
| return instances[cls] |
| |
| return get_instance |
| |
| |
| @singleton |
| class MyClass: |
| pass |
- 使用元类实现单例模式
| class Singleton(type): |
| _instances = {} |
| |
| def __call__(cls, *args, **kwargs): |
| if cls not in cls._instances: |
| cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs) |
| return cls._instances[cls] |
| |
| |
| class MyClass(metaclass=Singleton): |
| pass |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix