单例模式
1. 单例是什么
我们日常使用的电脑都有一个回收站,在整个操作系统中,回收站只能有一个实例,整个系统都使用这个唯一的实例,而且回收站自行提供自己的实例。因此回收站是单例模式的应用。
确保某一个类只会创建出一个实例,这个类称为单例类,单例模式是一种对象创建型模式。
2. 创建单例-保证只有1个对象
# 实例化一个单例
class Singleton:
__instance = None # 保存创建首次创建的对象
def __new__(cls):
# 如果类属性__instance的值为None,
# 那么就创建一个对象,并且赋值为这个对象的引用,保证下次调用这个方法时能够知道之前已经创建过对象了,这样就保证了只有1个对象
if cls.__instance is None:
print("创建对象")
cls.__instance = super().__new__(cls)
return cls.__instance
s1 = Singleton()
print(s1) # <__main__.Singleton object at 0x00000000009C5780>
s2 = Singleton()
print(s2) # <__main__.Singleton object at 0x00000000009C5780>
输出结果:
创建对象
<__main__.Singleton object at 0x00000000009C5780>
<__main__.Singleton object at 0x00000000009C5780>
3. 创建单例时,只执行1次init方法
class Singleton:
__instance = None # 保存创建首次创建的对象
__has_init = False # 记录是否已经初始化
def __new__(cls):
if cls.__instance is None:
print("创建对象")
cls.__instance = super().__new__(cls)
return cls.__instance
def __init__(self):
if not self.__has_init:
print("对象初始化")
self.type = "猫"
self.__has_init = True
s1 = Singleton()
s1.type = "动漫人物"
print(s1.type)
s2 = Singleton()
print(s2.type)
输出结果:
创建对象
对象初始化
动漫人物
动漫人物
个人博客:
https://blog.csdn.net/niubiqigai/article/details/82829024
网友评论