python装饰器实现单例模式

1、写一个类,定义一个‘类变量’,存储该类的实例个数

2、写装饰器,把该类变成单例类

3、写主函数,循环创建该类新实例,打印相关信息

---------------

from functools import wraps

def decorator(cls):
    instance = {}
    @wraps(cls)
    def wrapTheClass(*args, **kwargs):
        if cls not in instance:
            instance[cls] = cls(*args, **kwargs)
            print('A new instance!')
        else:
            print('No more instance!')
        return instance[cls]
    return wrapTheClass

@decorator
class myclass(object):
    instanceNum = 0

    def __init__(self):
        myclass.instanceNum = myclass.instanceNum+1
    def getInstNum(self):
        return myclass.instanceNum


if __name__ == '__main__':
    instance = {}
    for i in range(5):
        newInstance = myclass()
        if i == 0:
            singleInst = newInstance
            instance[i] = newInstance
            print('instanceNum is %d' % instance[i].getInstNum())

        else:
            if newInstance != singleInst:
                instance[i] = newInstance
                print('instanceNum is %d' % instance[i].getInstNum())
    print('实例字典中元素的个数是:%d' % len(instance))

---------------

测试:

1、写好以后,先关闭装饰器(#@decorator), 打印信息如下

instanceNum is 1
instanceNum is 2
instanceNum is 3
instanceNum is 4
instanceNum is 5
实例字典中元素的个数是:5

2、打开装饰器,打印信息如下

A new instance!
instanceNum is 1
No more instance!
No more instance!
No more instance!
No more instance!
实例字典中元素的个数是:1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值