python 实现单例模式的4种方法.

本文深入探讨了Python中实现单例模式的四种方法:使用模块、装饰器、重写__new__方法及元类。通过具体示例展示了如何确保类只生成一个实例,特别介绍了装饰器方法,并附带代码实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 使用模块
2. 使用装饰器
3. 使用__new__(父类重写new继承方法)
4. 使用元类(元类重写call){类的创建过程(①.拦截类的创建;②.修改类的定义;③.返回修改后的类}

下面例举前两种的方法

使用python模块
python模块 是天然的单例模式. 模块被第一次导入时,会生成 .pyc 文件. 第二次被导入时,加载 .pyc文件. 而不会再次执行模块代码. 所以说: 把相关函数和数据定义在一个模块中 就可以获得一个单例对象.

# mysingle.py
class MySingle:
	def foo(self):
		pass

singleton = MySingle()
	

上面代码保存到mysingle.py中 然后在新的pyc 文件中写上下方代码

from mysingle import singleton
singleton.foo()

使用装饰器的方法
装饰器可以动态的修改一个类或函数的功能。我们也可以使用装饰器来装饰某
个类,使其只能生成一个实例.

def singleton(cls):
	instances = { }
	def getinstances(*args, **kwargs)
		if cls not in instances:
			instances[cls] = cls(*args, **kwargs)
		return instances[cls]
	return getinstances

@singleton
Class MyClass:
	a = 2

b1 = MyClass
b2 = MyClass
print(b1 == b2)  
# 打印值为  True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值