python 单例模式4中实现方法
2024-09-04 15:37:01
python实现单例模式的方法:
1. 使用模块
python的模块在第一次导入时会生成.pyc文件,当第二次导入时就会直接加载.pyc文件,而不会再次执行模块代码。
只需将其单独放在一个模块里,并创建一个实例,外部使用时直接调用该实例即可。
2. 使用__new__方法
class Singleton:
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance is not None:
cls._instance = super().__new__(*args, **kwargs)
return cls._instance class Myclass(Singleton):
a = 1 class1 = Myclass()
class2 = Myclass()
print(class1 is class2)
输出结果:
True
3. 使用装饰器
from functools import wraps def singleton(cls):
instances = {}
@wraps(cls)
def getinstance(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return getinstance @singleton
class Myclass():
a = 1 class1 = Myclass()
class2 = Myclass()
print(class1 is class2)
输出结果:
True
4. 使用元类metaclass
class Singleton(type):
instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls.instances:
cls.instances[cls] = super().__call__(*args, **kwargs)
return cls.instances[cls] class Myclass(metaclass=Singleton):
a = 1 class1 = Myclass()
class2 = Myclass()
print(class1 is class2)
输出结果:
True
最新文章
- [Android Pro] Android异步任务处理之AsyncTaskLoader的使用
- [转]iOS代码块Block
- asp.net与Matlab类型转换(待补全)
- Eratosthenes筛选法构造1-n 素数表
- SQL简介
- UIView.FRAMEWORK
- C/C++ 笔试、面试题目大汇总(二)
- Calendar - SGU 115(日期判断)
- 在CGridView调用CJuiDialog的弹出层
- 实现过程全纪录——自己写一个“微信朋友圈”(包括移动端与PC端)
- 痞子衡嵌入式:第一本Git命令教程(1)- 准备(init/config/.gitignore)
- python学习03
- ORA-28002密码失效问题解决
- C语言 Struct 结构体在 Java 中的体现
- SharePoint REST API - 使用REST接口对列表设置自定义权限
- 理解 DocumentFragment
- [luogu3178][bzoj4034][HAOI2015]树上操作
- internal table operation
- IDEA入门级使用教程----你怎么还在用eclipse?
- HDU 6045 17多校2 Is Derek lying?