25 面向对象8: 单实例模式

"""
类中只有一个对象
1 重写new方法 只初始化一次内存
2 设置标志位,使init 在多次被执行时,实际代码只被执行一次
"""


 

class MusicPlayer(object):

    instance=None   #初始没有对象, 定义类的instance属性,设为空

    # new是object类内置的分配内存方法
    #返回的是地址,给init 方法使用
    def __new__(cls, *args, **kwargs):

        if cls.instance is None:    #如果类属性是空对象
            cls.instance = super().__new__(cls)  # 调用父类new方法,参数为本类,为第一个对象分配内存

        return cls.instance     #返回

    #设置init 标志
    if_init = False

    def __init__(self):

        if MusicPlayer.if_init==True:     #如果已经被初始化过,直接返回
            return
        else :
            print("播放器初始完成")      #模拟的实际的初始化
            MusicPlayer.if_init = 1

player1=MusicPlayer()
player2=MusicPlayer()
print(player1)
print(player2)

 

posted @ 2020-06-12 10:03  abel2020  阅读(113)  评论(0编辑  收藏  举报