Python基础 _ 单例

单例:

    创建一个类对象时 , 系统会开辟一块专属于这个对象的空间 , 开辟的动作是由class中的 __new__方法自动完成的 。new方法完成创建空间后,会return空间信息给__init__方法, 由__init__方法进行初始化设置 。那么每创建一个类对象,都将自动开辟一个新空间 。 

    单例的作用, 就是让指定的类对象, 只在创建第一个类对象时开辟空间,后面的类对象 ,都沿用这个空间,不再做重新开辟空间的动作。

    应用场景: 音乐播放器 , 登录框这些,同一时间只能单独存在的地方。

    简单的代码:

class test():   # 创建类
    # 先定义一个空值 , 用来做判断
    space = None

    '''修改new方法 : 1、判断类属性space是不是为空
        2、调用父类方法开辟新空间
        3return这个空间给init'''
    def __new__(cls, *args, **kwargs):
        if cls.space is None:
            cls.space = super().__new__(cls)
        return cls.space

    '''初始化方法随便搞一下'''
    def __init__(self):
        print(66)


a = test()
b=a
c= test()

print(id(a),id(b),id(c))
此时三个实例对象a,b,c的id位置一致,运行结果:
66
66
615122232600 615122232600 615122232600


Process finished with exit code 0

    代码实现思路: 判断类属性space是不是为空,第一个实例对象创建时,space=None,此时调用父类方法创建一个空间 (因为父类的new方法本身就会创建空间,这里不需要考虑如何进行创建,只需调用就会自动创建),并return ,等到第二次有新的实例对象时,space已经不为空了,会直接return第一次创建好的空间,同理后面的实例对象都在同一个空间了。

    当时研究明白之后,回头想实现的时候磕磕绊绊的,还是写下来吧~~~

猜你喜欢

转载自blog.csdn.net/weixin_42371158/article/details/80563467