3.应用
单例模式:对象只会被实例化一次,第二次开始都是实例化第一次的对象
1)各个实例化对象之间是独立的
class A:
def __init__(self, name):
self.name = name
# 实例化三个对象
a = A('wang')
b = A('wei')
# 打印结果地址是不同的,既实例化了三个对象
print(a) # <__main__.A object at 0x7fbfd0aec7f0>
print(b) # <__main__.A object at 0x7fbfd0aec828>
# 将 a 的名字改成阿黄,查看一下 b 和 c 的名字
a.name = 'zhao'
print(a.name) # zhao
print(b.name) # wei
2)单例中,始终是一个对象
class A:
__flag = False # 私有变量,表明该类是否被实例化过
def __init__(self, name):
self.name = name
def __new__(cls, *args, **kwargs):
if cls.__flag: # 如果被实例化了
return cls.__flag # 返回实例化对象
cls.__flag = object.__new__(cls) # 否则实例化
return cls.__flag # 返回实例化的对象
# 实例化三个对象
a = A('wang')
b = A('wei')
# 打印三个对象的地址,结果都是一个地址
print(a) # <__main__.A object at 0x7fbfd0aec6d8>
print(b) # <__main__.A object at 0x7fbfd0aec6d8>
# 改变 a 对象的 name 属性,查看 b , c 的 name 属性
a.name = 'zhao'
print(a.name) # zhao
print(b.name) # zhao
参考:
https://www.cnblogs.com/littlefivebolg/p/9688740.html
https://blog.csdn.net/geek_xiong/article/details/89843206