zoukankan      html  css  js  c++  java
  • 基础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>

  • 相关阅读:
    [杂说]网络是基础生产工具
    这几天的工作
    [代码]大家来动动脑筋吧
    测试
    [基础] 如何使用extern和static限定符
    元宵节快乐
    复杂的“人"
    C# SMTP发邮件不支持465端口的解决方案,网易企业邮箱
    软件三层架构模型
    ASP.NET MVC 使用二级域名来注册Area区域
  • 原文地址:https://www.cnblogs.com/joycezhou/p/11396926.html
Copyright © 2011-2022 走看看