python中实现单例模式需要用到类中方法new
单例模式: 只有一个实例 实现方法: 方法一:import 方法二:单例模式 方法三:装饰器
通常进行import导入数据后会生成缓存数据就是单例模式
class Person(object):
obj = None
def __init__(self):
pass
def __new__(cls, *args, **kwargs):
"""如果对象已经创建,就直接把创建好的对象返回
如果对象没有创建,就创建对象,并返回"""
if cls.obj is None:
cls.obj = super().__new__(cls) # 分配内存
return cls.obj
多例模式也是进行控制new下内存值id在一定的范围数量内
import random
class Person1(object):
obj = []
def __init__(self):
pass
def __new__(cls, *args, **kwargs):
"""如果对象已经创建,就直接把创建好的对象返回
如果对象没有创建,就创建对象,并返回"""
if len(cls.obj)==5:
return random.choice(cls.obj)
else:
self=super().__new__(cls)
cls.obj.append(self)
return self
if __name__ == '__main__':
xiaoming = Person1()
xiaohong = Person1()
xiaoming1 = Person1()
xiaohong1 = Person1()
xiaoming2 = Person1()
xiaohong2 = Person1()
print(xiaoming is xiaohong) # False
print(id(xiaoming),id(xiaohong),id(xiaoming1),id(xiaohong1),id(xiaoming2),id(xiaohong2))