因为创建对象时__new__方法执行,并且必须return 返回实例化出来的对象所cls.__instance是否存在,不存在的话就创建对象,存在的话就返回该对象,来保证只有一个实例对象存在(单列),打印ID,值一样,说明对象同一个。
class Singleton(object): __instance = None def __new__(cls,age,name): #如果类属性__instance的值为None,就创建一个对象,并且赋值为这个对象的引用, # 保证下次调用这个方法时能够知道之前已经创建过对象了 if not cls.__instance: cls.__instance = object.__new__(cls) return cls.__instance a = Singleton(18,"dongge") b = Singleton(8,"dongge") print(id(a)) #1956294394208 print(id(b)) #1956294394208 a.age = 20 print(b.age) # 20