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对象