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