这节主要记录单例设计的模式与单例之后执行一次的方法
单例:
目的是让这个只有一个实例化的对象
使用时需更改__new__方法,且需设置类属性
就先举个例子:上代码
class Player(object):
instance = None
def __new__(cls, *args, **kwargs):
if cls.instance is None:
cls.instance=super().__new__(cls)
return cls.instance
建立了一个Player类,其中需要设置一个类属性instance = None,之后更改new方法,因为new方法在使用时是为类的对象创造空间的,所以为了每次创建的对象都不变,也就是说地址不变,所以每次返回的地址应该相同。于此同时,在new方法当中应该保证不再创建新的地址,所以进行对instance的判断,是否地址相同,且存在,并赋值给instance,最后进行返回
建立对象:
player1=Player()
player2=Player()
print(player1)
print(player2)
我的运行结果:
<__main__.Player object at 0x000001FF3301FBE0>
<__main__.Player object at 0x000001FF3301FBE0>
接下来,讲单例只进行一次初始化
就刚那个类 我进行添加方法和变量,一个init方法和init__flag变量
上代码:
class Player(object):
instance = None
init__flag = False
def __new__(cls, *args, **kwargs):
if cls.instance is None:
cls.instance=super().__new__(cls)
return cls.instance
def __init__(self):
if Player.init__flag:
return
print("初始化成功")
Player.init__flag=True
其中init__flag需要进行初始化,对其赋值为False,然后在init方法当中对init__flag进行判断,如果为False则进行初始化,说明对象还没有创建过,就进行下面的输出语句与对init__flag赋值为True,就此也就保证了下次创建对象不再进行初始化
看运行结果:
初始化成功
<__main__.Player object at 0x00000133398FFBE0>
<__main__.Player object at 0x00000133398FFBE0>
这篇博客探讨了如何在Python中实现单例设计模式,确保类只有一个实例。通过修改`__new__`方法并设置类属性来保证对象的唯一性。同时,介绍了如何实现单例的只执行一次初始化,利用`__init__`方法和一个标志变量来控制初始化过程,防止多次初始化。示例代码展示了单例类的创建和运行效果。
3万+

被折叠的 条评论
为什么被折叠?



