def singleton(cls):
# 接收要实现单例模式的类 <class '__main__.Demo3'>
print('2',cls)
# 创建一个字典用来保存类的实例对象
_instance = {}
def _singleton(*args):
# *args 为接收到的参数
print('3',*args)
# 先判断这个类有没有对象
if cls not in _instance:
print('4',cls)
_instance[cls] = cls(*args) # 创建一个对象,并保存到字典当中
print('7',_instance[cls])
# 将实例对象返回
return _instance[cls]
return _singleton
# 使用单例模式
@singleton
class Demo4(object):
print('1')
# 继续执行自己的内容
def __init__(self,name):
# <__main__.Demo3 object at 0x00000280483EBEB0> C1C=CC=CC=1
print('5',self,name)
self.name = name
print('6',self.name)
a1 = Demo4(4)
a2 = Demo4(2)
print(a1.name)
print(a2.name)
结果都为4
文章介绍了如何在Python中使用装饰器实现单例模式,确保同一类只创建一个实例。通过定义一个名为`singleton`的装饰器,它会存储类的实例在一个字典中。当尝试创建新的类实例时,装饰器会检查字典,如果类尚未实例化,则创建并保存,然后返回该实例。在示例中,`Demo4`类被装饰并创建了两个实例`a1`和`a2`,它们共享相同的`name`属性值。
924

被折叠的 条评论
为什么被折叠?



