当前位置: 首页 > news >正文

美国淘宝代购网站建设/郑州厉害的seo顾问公司

美国淘宝代购网站建设,郑州厉害的seo顾问公司,服务好的网站建设,新手做站必看 手把手教你做网站单例模式指确保某个类在整个系统中只存在一个实例的一种设计模式使用单例模式的好处:1、每个实例都会占用一定的内存资源,且初始化实例时会影响运行性能,所以当整个系统只需一个实例时,使用单例模式不仅可减少资源占用&#xff0c…

单例模式指确保某个类在整个系统中只存在一个实例的一种设计模式

使用单例模式的好处:

1、每个实例都会占用一定的内存资源,且初始化实例时会影响运行性能,所以当整个系统只需一个实例时,使用单例模式不仅可减少资源占用,而且因为只初始化一次,还可以加快运行性能。例如当程序通过一个类来读取配置信息,而程序多个地方需要使用配置信息,这时整个程序运行过程中只需一个实例对象即可,可减少占用内存资源,同时还可以保证程序在多处地方获取的配置信息一致。

2、使用单例模式可进行同步控制,计数器同步、程序多处读取配置信息这些情景下若只存在一个实例,即可保证一致性。

在python中,一般可使用一下4种方式实现单例模式:

1、通过模块调用

2、使用__new__方法

3、使用装饰器

4、使用元类(metaclass)

一、通过模块调用做法:将需要实现单例的类写在模块文件中,然后通过import引入该模块,即可得到单例对象。

原理:在python3中,首次导入模块文件时,会在程序目录下的__pycache__目录中生成pyc文件,之后再导入时,将直接加载pyc文件。从而实现单例。

实现代码:module_demo.py class singleton_cal: def foo(self): pass export_singleton = singleton_cal()

use_module.py from module_demo import export_singleton a = export_singleton from module_demo import export_singleton b = export_singleton print(a == b) print(id(a) == id(b))

可发现,多次调用/导入模块,使用的都是同一个实例对象

二、使用__new__方法_new__与_init__的区别:

__new\:创建实例对象时调用的构造方法

_init_:初始化方法,用于设置实例的相关属性

python创建实例时,会先调用__new__构造方法,然后使用__init__进行实例初始化。

我们可以通过__new__来影响实例的创建,从而实现单例。

实现代码:use_new.pyclass Singleton(object):

__instance = None

def __new__(cls,*args,**kwargs):

if not cls. __instance:

cls.__instance = super().__new__(cls,*args,**kwargs)

return cls.__instance

a = Singleton()

b = Singleton()

print(a == b)

print(id(a) == id(b))

上面代码中,声明了一个私有类变量__instance,当__instance不为None时,代表系统中已有实例,直接返回该实例,若__instance为None时,表示系统中还没有该类实例,则创建新实例并返回。

三、使用装饰器use_decorator.pyfrom functools import wraps

def singleton(cls):

instances = {}

@wraps(cls)

def getinstance(*args, **kwargs):

if cls not in instances:

instances[cls] = cls(*args, **kwargs)

return instances[cls]

return getinstance

@singleton

class singleCls(object):

def foo(self):

pass

a = singleCls()

b = singleCls()

print(a == b)

print(id(a) == id(b))

只有当第一次调用singleCls时,装饰器才会从instances={}开始执行,之后调用singleCls时,都只执行getinstance函数,这是装饰器的特性,利用这个特性,当我们多次调用singleCls时,在getinstance函数中判断该类是否存在于instances字典中,若不存在,则创建该类实例并加入instances字典中,并返回字典中该类的实例;若存在,则直接返回字典中该类的实例。可利用该装饰器为多个类实现单例。

四、使用元类(metaclass)

元类创建了所有的类型对象(包括object对象),系统默认的元类是type。

实例,类,父类,元类的关系可表示为下图

元类中的__call方法,在已该类为元类的类创建实例时调用,例如:类A以类B为元类,当A创建实例时,B中的\call将会被调用。利用\call__可实现对实例创建的控制。

实现代码:use_metaclass.pyclass SingletonMeta(type):

__instance = None

def __call__(cls,*args,**kwargs):

if not cls.__instance:

cls.__instance = type.__call__(cls,*args,**kwargs)

return cls.__instance

class myclass(metaclass = SingletonMeta):

def foo(self):

pass

a = myclass()

b = myclass()

print(a==b)

print(id(a)==id(b))

自定义元类时,通常继承自type,声明一个私有类变量__instance保存类实例,当__instance为None时,调用type的__call__方法为类创建实例,保存到__instance并返回;若__instance不为None,则直接返回__instance,不重新创建实例。

http://www.lbrq.cn/news/1043731.html

相关文章:

  • 网站建设 源代码归属/搜索优化的培训免费咨询
  • 房产证/网站seo排名培训
  • 广东同江医院网站建设/2023免费推广入口
  • 网站源码下载了属于侵权吗/百度推广登陆入口
  • 腾讯网站站内面包屑导航/厦门网站推广优化哪家好
  • wordpress 动态网站/自己怎么做引流推广
  • 在哪里做卖车网站/每日财经要闻
  • 网站建设快照优化/淘宝运营培训机构
  • 微信公众号网站导航怎么做/专业做网站官网
  • 在网站中写小说想要删除如何做/网站引流推广怎么做
  • 谷歌seo网站运营/陕西省人民政府
  • 怎么用java做html5网站/seo外贸公司推广
  • 不错的网站建设/合肥百度快速排名优化
  • 冠县网站开发/seo如何优化
  • 群晖 wordpress 迁移/新站优化案例
  • 收到网站建设账务处理/个人如何加入百度推广
  • 网站当前位置怎么做/做网站seo推广公司
  • 网站显示系统建设中/seo自然搜索优化排名
  • sketch代替ps做网站/开封网站seo
  • 揭阳模板网站建站/如何注册属于自己的网站
  • 微信小程序制作宣传图册/简述seo的概念
  • 展示型网站制作公司/排名优化哪家专业
  • 用bootstrap3做的网站/龙岗网络公司
  • wordpress 整合php/临安网站seo
  • 网站制作机构/排名软件
  • 乌鲁木齐在线/搜索引擎优化的基本手段
  • wordpress站点前台请求数过多/互联网营销公司
  • 给企业做网站如何定价/江西网络推广seo
  • 自适应产品网站模板/网站建设明细报价表
  • 湖北专业网站建设维修电话/百度大全免费下载
  • openresty-lua-redis案例
  • String AOP、事务、缓存
  • pgAdmin 仪表盘的system部分不能显示,报SYSTEM_STATS扩展没有安装
  • Web自动化技术选择
  • 云服务器--阿里云OSS(2)【Springboot使用阿里云OSS】
  • ImageJ 实用技巧:通过 Overlay 实现图像透明标记的完整教程