基础DAY10-单例

 

 

class MusicPlayer(object):
    # * 元组 ** 字典
    def __new__(cls, *args, **kwargs):
        # 使用类名创建对象,new方法会被自动调用
        print("创建对象,分配空间")
        # 2 为对象分配空间
        instrance = super().__new__(cls)
        # 3 返回对象的引用
        return instrance

    def __init__(self):
        print("播放器初始化")


# 创建播放器对象


player = MusicPlayer()

print(player)
__new__

class MusicPlayer(object):
    # 定义一个类属性,初始值是None,用于记录单例对象的引用
    instance = None
    
    # * 元组 ** 字典
    def __new__(cls, *args, **kwargs):
        # 使用类名创建对象,new方法会被自动调用
        if cls.instance is None:
            cls.instance = super().__new__(cls)
        return cls.instance

    def __init__(self):
        print("播放器初始化")


# 创建播放器对象
player = MusicPlayer()
print(player)
player2 = MusicPlayer()
print(player2)

播放器初始化
<__main__.MusicPlayer object at 0x00000000012F4780>
播放器初始化
<__main__.MusicPlayer object at 0x00000000012F4780>

class MusicPlayer(object):
    # 定义一个类属性,初始值是None,用于记录单例对象的引用
    instance = None
    init_flag = False
    # * 元组 ** 字典
    def __new__(cls, *args, **kwargs):
        # 使用类名创建对象,new方法会被自动调用
        if cls.instance is None:
            cls.instance = super().__new__(cls)
        return cls.instance

    def __init__(self):

        # 1 判断是否执行过初始化动作
        if MusicPlayer.init_flag == False:
            # 2 如果没有执行过,在执行初始化动作
            print("播放器初始化")
            # 3 修改类属性的标记
            MusicPlayer.init_flag = True
        return

# 创建播放器对象
player = MusicPlayer()
print(player)
player2 = MusicPlayer()
print(player2)
初始化方法只执行一次

播放器初始化
<__main__.MusicPlayer object at 0x0000000000814748>
<__main__.MusicPlayer object at 0x0000000000814748>

 

posted @ 2019-08-22 21:19  才华配得上梦想  阅读(85)  评论(0编辑  收藏  举报