为什么需要单例模式???
class A:
passa1=A()
a2=A()# 这样每创建一个对象,就会开辟一块内存空间
# 在实际研发中,有时候只需要调用类中的某个功能,不希望占用那么多的空间,这就要用到单例模式
单例起到一个内存优化的作用
单例模式讲解:
class Singleton:
# 私有化 单例的地址就存在于__instance
__instance =None # 默认是空的
# 重写object中的__new__
# __new__: 实例化的魔术方法【作用:开辟空间】
# 触发时机:实例化时候触发
def __new__(cls): # cls指当前类
print('-----__new__-----')
if cls.__instance is None:
# print('--1')
# 赋值
cls.__instance=object.__new__(cls) # 产生内存地址
return cls.__instance # 返回给底层的__init__
# 查看类中的属性
print(dir(Singleton))
# ['_Singleton__instance', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
s1 = Singleton()
s2 = Singleton()
# -----__new__-----
# -----__new__-----
print(s1)
print(s2)
# <__main__.Singleton object at 0x000002846AC38630>
# <__main__.Singleton object at 0x000002846AC38630>
# 可以看出,二者的地址相同
# 这就是单例,只产生一个地址