学无止境

少年辛苦终身事,莫向光阴惰寸功。——唐·杜荀鹤《题弟侄书堂》


Python单例

  • 举个常见的单例模式例子,我们日常使用的电脑上都有一个回收站,在整个操作系统中,回收站只能有一个实例,整个系统都使用这个唯一的实例,而且回收站自行提供自己的实例。因此回收站是单例模式的应用。

  • 单例模式,是一种常用的软件设计模式。在它的核心结构中,只包含一个被称为单例的特殊类。

  • 通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。

class A(object):
    # 定义类属性记录实例化对象
    __instance = None
    
    # 创建实例对象的方法
    def __new__(cls):
        # 如果没有创建实例对象就创建
        if cls.__instance == None: 
            cls.__instance = object.__new__(cls)
            return cls.__instance
        else:
            #如果存在就直接返回
            return cls.__instance


# 创建单例时,只执行1次__init__方法
 class Singleton(object):
    # 定义雷属性记录实例化对象
    __instance = None
    #创建市里的方法
    def __new__(cls):
        if cls.__instance = None:
            cls.__instance = object.__new__(cls)
            return cls.__instance
        else:
            return cls.__instance
    
    def __init__(self, name):
        self.name = name

    怎么保证打印的名字是一个呢

class Singleton(object):
    __instance = None
    # 标志语,false没有赋值 ture 已经赋值
    __init__flag = False
    重写new方法,创建对象记录下来
    下次创建对象的时候不去创建新的对象而是返回已经创建的对象
    def __new__(cls):
    if cls.__instance = None:
        cls.__instance = object.__new__(cls)
        print('创建新对象的地址',id(cls.__instance)
        return cls.__instance
        return cls.__instance
    else:
        return cls.instance
    def __init__(self, name):
    if Singleton.__init__flag = False:
        self.name = name
        Singleton.__init__flag = True