当前位置 博文首页 > m0_51723227的博客:13 单例特殊化初始值

    m0_51723227的博客:13 单例特殊化初始值

    作者:[db:作者] 时间:2021-08-03 21:09

    只执行一次初始化工作

    在每次使用类名()创建对象时,Python解释器都会自动调用两个方法:
      • __new__分配空间
      • __init__对象初始化
    • 在上一小节对__new__ 方法改造之后,每次都会得到第一次被创建对象的引用.

    • 但是:初始化方法还会被再次调用

      需求

      • 扯初始化动作只被执行
    • 解决办法

      1.定义一个类属性init_flag标记是否执行过初始化动作,初始值为False
      2.在__init__方法中,判断init_flag. 如果为False 就执行初始化动作
      3.然后将init_flag设置为True
      4.这样,再次自动调用__init__ 方法时, 初始化动作就不会被再次执行了

    class MusicPlayer:
        init_instance = False
        
        def __init__(self):
            # 1 首先判断真假
            if MusicPlayer.init_instance:         #   if 后面如果不跟其它,则默认为真
                 return                           #   记得这个吗?,在定义函数里面使用return便表示不再运行下面的代码
            # 2 如果是假,就执行初始化动作,然后赋值给instance  真
            print("哈哈哈哈哈哈")
            # 3 如果是真,结束
            MusicPlayer.init_instance = True
            
            
    a = MusicPlayer()
    b = MusicPlayer()
    c = MusicPlayer()
            
     
    执行结果:
    哈哈哈哈哈哈
    

    正常情况下,创建一个对象,便执行一次初始化动作,这里创建了三个对象,但是却只执行了一次,满足条件.!

    新人创作,若有问题,欢迎大佬斧正

    cs
    下一篇:没有了