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
  • 相关阅读:
    Windows删除被占用的文件或文件夹
    Fatal error in launcher: Unable to create process using
    World/excel无法同时打开两个解决办法
    Zabbix故障处理系列
    第1章 数据库系统概述
    第2章 关系数据库
    第3章 数据库设计
    Linux命令概况
    Python -扩展C++-Pytorch扩展
    技术栈_人工智能-大数据-云计算
  • 原文地址:https://www.cnblogs.com/hz-jelly/p/11013115.html
Copyright © 2011-2022 走看看