python开发

单例模式的使用

2018-10-30  本文已影响0人  梦里才是真

单例模式

1. 单例是什么

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

确保某一个类只会创建出一个实例,这个类称为单例类,单例模式是一种对象创建型模式。

2. 创建单例-保证只有1个对象

# 实例化一个单例
class Singleton:
    __instance = None  # 保存创建首次创建的对象

    def __new__(cls):
        # 如果类属性__instance的值为None,
        # 那么就创建一个对象,并且赋值为这个对象的引用,保证下次调用这个方法时能够知道之前已经创建过对象了,这样就保证了只有1个对象
        if cls.__instance is None:
            print("创建对象")
            cls.__instance = super().__new__(cls)

        return cls.__instance


s1 = Singleton()
print(s1)  # <__main__.Singleton object at 0x00000000009C5780>
s2 = Singleton()
print(s2)  # <__main__.Singleton object at 0x00000000009C5780>

输出结果:

创建对象
<__main__.Singleton object at 0x00000000009C5780>
<__main__.Singleton object at 0x00000000009C5780>

3. 创建单例时,只执行1次init方法

class Singleton:
    __instance = None  # 保存创建首次创建的对象
    __has_init = False  # 记录是否已经初始化

    def __new__(cls):

        if cls.__instance is None:
            print("创建对象")
            cls.__instance = super().__new__(cls)

        return cls.__instance

    def __init__(self):
        if not self.__has_init:
            print("对象初始化")
            self.type = "猫"
            self.__has_init = True

s1 = Singleton()
s1.type = "动漫人物"
print(s1.type)
s2 = Singleton()
print(s2.type)

输出结果:

创建对象
对象初始化
动漫人物
动漫人物

个人博客:
https://blog.csdn.net/niubiqigai/article/details/82829024

上一篇 下一篇

猜你喜欢

热点阅读