class Singleton:
_sgl = None
#
"""
在创建实例化对象之前先判断该类是否已被实例化
如果没有实例化,则利用父类 __new__方法 进行实例化,
如果已经实例化,不再进行二次实例化,直接将已经实例化的对象返回
"""
def __new__(cls, *args, **kwargs):
if cls._sgl is None:
cls._sgl = super(Singleton, cls).__new__(cls, *args, **kwargs)
return cls._sgl
class MyClass(Singleton):
def __init__(self):
self.x = 18
def show(self):
print(self.x)
# 测试
if __name__ == '__main__':
sa = MyClass()
sb = MyClass()
print(id(sa),id(sb), sa == sb) # 39953408 39953408 True