zoukankan      html  css  js  c++  java
  • python_study_10-单例模式

    前言:一些资源管理器常常设计成单例模式:类,可以用类生出多个变量,可有些场景不需要多个变量,项目比较大。比如配置文件,全局都只要一份配置,可在代码多次用并且不需要多次new对象,一个类只需要一个对象,就需要使用单例了。

    一、采用修饰器实现单例模式,修饰器的第一个参数应该是被修饰的类,可以采用字典来存储类实例,类作为key,实例作为值

    def singleton(cls, *args, **kwargs):
        _instance = {}
        def get_instance():
            if cls not in _instance:
                _instance[cls] = cls(*args, **kwargs)
            return _instance[cls]
        return get_instance
    
    @singleton
    class Singleton():
        pass
    
    sln1 = Singleton()
    sln2 = Singleton()
    print(id(sln1))
    print(id(sln2))
    
    output:
    sln1=11076560
    sln2=11076560


     二、类模式实现单例的关键在于构造器,__new__里控制类只被实例化一次,可以通过类属性保存类实例,判断类属性是否存在,不存在则实例化对象并赋值

    class Singleton(object):
        def __new__(cls, *args, **kwargs):
            if not hasattr(cls, '_instance'):
                cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
            return cls._instance
    
    sing1 = Singleton()
    sing2 = Singleton()
    print(id(sing1))
    print(id(sing2))
    output: sing1
    =18743952 sing2=18743952
  • 相关阅读:
    编程语言学哪个比较好?
    C#一定要避免程序中很多的依靠
    EXPIREAT
    EXISTS
    DUMP
    Python之sys模块
    Python的OS模块
    CentOS 7上安装gitlab-runner
    PyCharm激活方法
    Linux03 文件的相关操作(touch、rm、mv、cat)
  • 原文地址:https://www.cnblogs.com/hz-jelly/p/11013115.html
Copyright © 2011-2022 走看看