基本实现:通过创建一个类属性指向实例对象
class Dog:
# 定义一个私有类属性
__instance = None
def __new__(cls):
if cls.__instance == None:
cls.__instance = super().__new__(cls)
return cls.__instance
else:
# 上一次创建的对象的引用
return cls.__instance
a = Dog()
print(id(a))
b = Dog()
print(id(b))
打印结果:
4387682736
4387682736
拓展:初始化带参数的单例
class Dog:
# 定义一个私有类属性
__instance = None
__init_flag = False
def __new__(cls, name):
if cls.__instance == None:
cls.__instance = super().__new__(cls)
return cls.__instance
else:
# 上一次创建的对象的引用
return cls.__instance
def __init__(self, name):
if Dog.__init_flag == False:
self.name = name
Dog.__init_flag = True
pass
pass
a = Dog("旺财")
print(id(a))
print(a.name)
b = Dog("小白")
print(id(b))
print(b.name)
打印结果:
4466540616
旺财
4466540616
旺财
网友评论