Python 总结之单例模式

2018-05-10  本文已影响0人  Elvis_zhou

单例模式

1.什么是单例模式
确保一个类只有一个实例对象。
2.为什么用单例模式
在日常电脑使用中,往往会用到任务管理器,回收站等等,这些程序在操作系统中就是唯一的。这样就不会让系统中出现多个相同程序导致内存资源的浪费。

实现单例模式的几种方式

1.使用模块
其实,Python 的模块就是天然的单例模式,因为模块在第一次导入时,会生成 .pyc 文件,当第二次导入时,就会直接加载 .pyc 文件,而不会再次执行模块代码。因此,我们只需把相关的函数和数据定义在一个模块中,就可以获得一个单例对象了。如果我们真的想要一个单例类,可以考虑这样做:

mysingleton.py

class Singleton(object):
    def foo(self):
        pass
singleton = Singleton()

将上面的代码保存在文件 mysingleton.py 中,要使用时,直接在其他文件中导入此文件中的对象,这个对象即是单例模式的对象

from mysingleton import singleton

2.基于new方法实现(推荐)
我们知道,当我们实例化一个对象时,是先执行了类的new方法(我们没写时,默认调用object.new),实例化对象;然后再执行类的init方法,对这个对象进行初始化,所以我们可以基于这个,实现单例模式

class Singleton(object):
    __instance = None  # 设置一个类属性(只创建一个对象)
    is_first_run = True  # 设置一个类属性(只初始化一次)

    def __new__(cls, age):
        if not cls.__instance:   # 这里对象还没创建所以是cls调用
            cls.__instance = object.__new__(cls)
        return cls.__instance

    def __init__(self, age):
        if self.is_first_run:
            self.age = age
            self.is_first_run = False  # 这里new创建了对象,所以用self

a = Singleton(18)
b = Singleton(20)
print(id(a))
print(id(b))
print(b.age)
print(a.age)

打印结果如下:

140063755106960
140063755106960
18
18
上一篇 下一篇

猜你喜欢

热点阅读