单例模式
为了使某些类在同一时间,只能运行一个而产生的一种设计模式
# 自定义
# 如果 当前类已经有实例在运行, 就不会创建新的实例
# 保证只有唯一的实例在运行
class Singleton:
def __new__(cls, *args, **kwargs):
if not hasattr(cls, "_instance"):
cls._instance = super(Singleton, cls).__new__(cls)
return cls._instance
# 想要保证只有唯一的实例在运行的类
class MyClass(Singleton):
def __init__(self, a):
self.a = a
# 证明:两者会以新的实例来运行,旧的实例会被新的实例覆盖
# 但两者的内存空间未变
ms1 = MyClass(1)
ms2 = MyClass(2)
print(ms1.a, ms2.a)
print(id(ms1), id(ms2))
"""
结果:
2 2
139843914173312 139843914173312
"""