class Practice(object):
cls_flag = False
def __new__(cls):
if cls.cls_flag == False:
cls.cls_flag = object.__new__(cls) # 注意object.__new__(cls)括号中的cls,将类传到父类object中
return cls.cls_flag
def __init__(self):
print('执行了init')
a = Practice()
b = Practice()
print(a)
print(b)
class Practice1(object):
def __init__(self):
print('66')
a1 = Practice1()
a2 = Practice1()
print(id(a1))
print(id(a2))
结果:
执行了init
执行了init
<__main__.Practice object at 0x000002B32CE99A58>
<__main__.Practice object at 0x000002B32CE99A58>
66
66
2968575908496
2968575908664
单例中无论创建几个对象,都是对同一个内存对象进行操作的。
!!! 注意:单例必须返回一个当前类的new对象